单链表的删除---在链表中删除值为x的元素 和 往链表中i位置插入一个数x的操作

单链表的删除:通过图来看思路



p指针用来找链表中数字为x的位置,pre指针始终指向p指针所指向位置的前一个位置

最好自己在纸上模拟一下

代码:

#include<bits/stdc++.h>
using namespace std;
typedef struct Node
{
    int value;
    struct Node *next;
}node,*linkedlist;
linkedlist linkedlistdelete(linkedlist l,int x)
{
    node *p=(node *)malloc(sizeof(node));
    p=l->next;//p指针指向的是链表的第一个数,然后p指针往下走
    node *pre=(node *)malloc(sizeof(node));//必须维护pre指针,pre指针始终指向的是p指针指向的节点的前一个节点
    while (p->value!=x)//只要p指针指向的节点的数字不等于x,p指针就往下走
    {
        pre=p;
        p=p->next;
    }
    pre->next=p->next;//程序到这了,说明找到了数字为x的节点了,pre指向的是这个节点的前一个节点,让该节点的下一个节点直接等于数字等于x节点的下一个节点
    free(p);//把数字等于x的节点释放掉
    return l;
}

往单链表i位置插入一个数x  通过图看思路



pre指针作用是到达链表中的指定位置,即i位置  p指针(这里叫指针不太准确)为新加的链表结构

代码

#include<bits/stdc++.h>
using namespace std;
typedef struct Node
{
    int value;
    struct Node *next;
}node,*linkedlist;
linkedlist linkedlistinsert(linkedlist l,int i,int x)//指针l指向的是链表的首地址,i表示加入到链表中的i位置,x表示要加入的数
{
   node *pre=(node *)malloc(sizeof(node));//定义pre指针用来找出链表中的i位置
   pre=l->next;//刚开始让pre指针指向链表的第一个位置。注意:这里是地址与地址之间的赋值。
   int index;
   for(index=1;index<i-1;i++)//通过这个for循环可以使pre成功指向链表中的i位置
        pre=pre->next;//让pre指针指向pre现在指向节点的下一个节点
   node *p=(node *)malloc(sizeof(node));//新建一个节点
   p->value=x;
   p->next=pre->next;//让新建的节点p指向i位置节点的下一个节点
   pre->next=p;//pre节点(原先i位置上的节点)指向新建的p节点
   return l;
}


猜你喜欢

转载自blog.csdn.net/qq_40938077/article/details/80229643
今日推荐