当前位置:   article > 正文

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

java 递归删除链表中值为x的节点

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

0ac251ea675d1ee40e1547bcff40dba1.png

5f5c36d204b199553e22f3455fdf2d8e.png

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

最好自己在纸上模拟一下

代码:

#includeusing 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  通过图看思路

12440a96bef5096dcee1fbeb5c84457a.png

922ca6505d58a73e48acbd766bec5900.png

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

代码:

#includeusing namespace std;

typedef struct Node

{

int value;

struct Node *next;

}node,*linkedlist;

linkedlist linkedlistinsert(linkedlist l,int i,int x)//指针l指向的是链表的第一个节点(指针l并不是链表中的第一个节点,只是指向链表的第一个节点),i表示加入到链表中的i位置,x表示要加入的数

{

node *pre=(node *)malloc(sizeof(node));//定义pre指针用来找出链表中的i位置

pre=l;//刚开始让pre指针指向链表中的第一个节点的位置。注意:这里是地址与地址之间的赋值。

int index;

for(index=1;indexnext;//让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;

}

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号