首页 > 其他分享 >线性链表的基本操作

线性链表的基本操作

时间:2023-05-31 17:34:00浏览次数:31  
标签:node val int next 链表 while 线性 基本操作 NULL


线性链表常见的操作:插入,删除,查找等等。以下采用尾插法建立的线性链表。

#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;

struct node
{
    int val;
    node *next;
};

node *head,*p,*q;

void Init()
{
    head = new node();
    q = head;
}

void Insert(int x)   //尾插法
{
    p = new node();
    p->val = x;
    q->next = p;
    q = p;
    q->next = NULL;
}

int Find(node *t,int k) //查找第k个元素的值
{
    int cnt = 1;
    node *p = t;
    p = t->next;
    while(p != NULL && (cnt < k))
    {
        p = p->next;
        cnt++;
    }
    return p->val;
}

bool Search(node *t,int x)  //查找键值为x的元素是否在链表中
{
    node *p = t;
    while(p != NULL)
    {
        if(p->val == x) return true;
        p = p->next;
    }
    return false;
}

void Delete(node *t,int x)
{
    node *q = t,*p;
    p = q->next;
    while(p != NULL && (p->val != x))
    {
        q = p;
        p = p->next;
    }
    q->next = p->next;
    delete p;
}

void Print()
{
    node *t = head;
    t = t->next;
    while(t != NULL)
    {
        printf("%d ",t->val);
        t = t->next;
    }
    cout<<endl;
}

int main()
{
    int n,x;
    while(cin>>n)
    {
        Init();
        while(n--)
        {
            cin>>x;
            Insert(x);
        }
        Print();
    }
    return 0;
}

 

 

标签:node,val,int,next,链表,while,线性,基本操作,NULL
From: https://blog.51cto.com/u_16146153/6388665

相关文章

  • 找出两个单链表的公共结点
    给定两个单链表,找出两个单链表的公共结点LinkedListSearch_Common_LNode(LinkedList&L1,LinkedList&L2){ LNode*p=L1->next; LNode*q=L2->next; LinkedList&common_L; while(p){ while(q){ if(q->data==p->data){ insert(common_L,q)......
  • 删除单链表中所有介于给定的两个值之间的元素的元素
    设在一个带头结点的单链表中所有元素结点的数值域无序,编写一个函数,删除表中所有介于给定的两个值(作为函数参数给出)之间的元素的元素(若存在)分析:因为链表是无序的,所以只能逐个结点进行检查,执行删除代码如下:voidDelete_Range(LinkedList&L,intmin,intmax){ LNode*p=L->......
  • python deque的内在实现 本质上就是双向链表所以用于stack、队列非常方便
    Howcollections.dequeworks?Cosven  前言:在Python生态中,我们经常使用collections.deque来实现栈、队列这些只需要进行头尾操作的数据结构,它的append/pop操作都是O(1)时间复杂度。list的pop(0)的时间复杂度是O(n),在这个场景中,它的效率没有deque高。那deque内部......
  • Gym - 100851L [二分+线性推导]
    题目链接:https://vjudge.net/problem/Gym-100851L 解题思路:根据题目知道,墙的两边是不能放石头的,所以最终的结果肯定会收到两边墙的限制,从而使得答案不会超过1e9+1e5。此外我们再去二分最大高度,一个明显的结论就是以i为最高点建墙的话最少花费肯定是建一个金字塔形的墙面。但由于......
  • 获取设备基线性能的想法与实践
    获取设备基线性能的想法与实践背景产品的发展离不开功能实现和性能满足功能实现还是可以通过功能测试,UAT等方式来验证。性能是否满足有时候比较难处理。虽然可以通过压测。但是压测时总会有太多的变量较难控制一般客户也不会提供一套跟生产一样的环境进行验证。感觉此时......
  • 算法 dfs —— 将二叉树 先序遍历 转为 链表
    将二叉树拆成链表中文English将一棵二叉树按照前序遍历拆解成为一个 假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。Example样例1:输入:{1,2,5,3,4,#,6}输出:{1,#,2,#,3,#,4,#,5,#,6}解释:1/\25/\\3461\2......
  • 单链表(c++实现)
    template<typenameT>classListNode{public:explicitListNode(Tvalue_,ListNode*next_=nullptr):value(value_),next(next_){}TgetValue()const{returnvalue;}ListNode<T>*getNext()const{returnnext;};voidsetNext(ListNo......
  • 动手学深度学习P3.1-线性神经网络-线性回归
    3.1线性回归回归(regression)是能为一个或多个自变量与因变量之间关系建模的一类方法。在自然科学和社会科学领域,回归经常用来表示输入和输出之间的关系。3.1.1线性回归的基本元素这一部分主要是各种原理及公式,还是需要直接去阅读全文~总结部分要点如下:线性回归的前提假设......
  • 单链表
    1、特点:任意存储,顺序存取2、结构体定义和预定义#include<stdio.h>#include<stdlib.h>//malloc函数#defineElemTypeint#defineStatusint#defineERROR0#defineOK1typedefstructLnode{ElemTypedata;structLnode*next;}Lnode,*Linklist;3、初始......
  • 移除链表元素
    代码随想录中的一道基础算法题,这里记录下设置一个虚拟头结点在进行删除操作通过设置虚拟头节点,原链表的所有节点就都可以按照统一的方式进行移除了。classSolution{public:ListNode*removeElements(ListNode*head,intval){ListNode*dummyHead=new......