问个关于链表插入结点的问题

summerYe 2010-02-21 06:25:16
关于链表插入我们一般分三种情况(假设插在ptr结点之后):
1。插入到头结点之前。
2。插到最后一个结点之后。
3。中间结点。
一般我们是用newNode->next = ptr->next;(插在ptr之后,ptr用findNod函数来确定)
ptr->next = newNode;来解决。
我想问一下1。对于插到头结点前面的判断条件是什么比如if(___)括号在是什么条件?比如插到最后条件则是if(ptr->next = NUUL)
2。对于第二种情况和第三种情况似乎可以作为同一种情况处理?为什么不能?
3。对于循环链表为什么却把第二种和第三种情况分在一起,而单链表为什么不能?而且循环链表插入到头结点的判断条件又是什么呢?似乎和单链表不同,if(__)。
...全文
143 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sallan 2010-02-22
  • 打赏
  • 举报
回复
8楼的思路是对的
做单链表的话这个思路很好
如果哪位高手有更好更容易得算法
拿出来让大家看看,学习。
ls251544415 2010-02-21
  • 打赏
  • 举报
回复
说说自己的经验吧,我创建链表是用如下的方法:
在构造链表前,先弄两个节点,分别作为首、末的结点,首、末两结点不加入数据
自己往链表添加数据时,就往首、末两结点中间插入就是

例如:
首结点是"Begin"
末结点是"End"

空链表时的链表表示成:Begin End
非空链表时的链表表示:Begin 1 2 3 …… n End

用上述方法创建的链表,操作起来可以方便很多

个人经验而已,若有不足之处,还请各位指出。
stardust20 2010-02-21
  • 打赏
  • 举报
回复
引用 6 楼 summerye 的回复:
stardust20你这种方法是对的,不过我那种while循环下用这样的代码插入头结点之前行不?
if (ptr ==NULL)//第一种情况,插入头结之前。即是你while中的那个条件
newNode->next = head;
return newNode;
如果行,那么链表为空时怎么办呢?我一直没考虑也没理解这个问题,是不是要再考虑一种链表为空的情况一共就是四种情况呢?

呀。。不好意思。。看晕了。。单链表的话插入考虑两种情况。。。在头结之前和头结点以后就可以了。。
summerYe 2010-02-21
  • 打赏
  • 举报
回复
stardust20你这种方法是对的,不过我那种while循环下用这样的代码插入头结点之前行不?
if (ptr ==NULL)//第一种情况,插入头结之前。即是你while中的那个条件
newNode->next = head;
return newNode;
如果行,那么链表为空时怎么办呢?我一直没考虑也没理解这个问题,是不是要再考虑一种链表为空的情况一共就是四种情况呢?
stardust20 2010-02-21
  • 打赏
  • 举报
回复
while( ptr->data != value )
{
ptr = ptr->next;
}
这个要改成这样吧
while(ptr != NULL && ptr->data != value)//当没到达结尾且没找到要的值时
{
ptr = ptr->next;
}
summerYe 2010-02-21
  • 打赏
  • 举报
回复
我是楼主,我的寻找结点代码可以是这样,各位帮忙看下:
//newNode插在ptr之后,寻找ptr
sturct list* findNode(struct list* head,int value)//value为ptr结点的值。
{
struct list* ptr;
struct list* ptr = head;
while( ptr->data != value )
{
ptr = ptr->next;
}
return ptr;
}



stardust20 2010-02-21
  • 打赏
  • 举报
回复
我们一般会存链表的头节点的。。不然你从哪里开始遍历整条链表。。。
然后把现在的节点和头节点比下就知道它是不是头节点了。。。循环链表。。单链表都是这样
yyg990441 2010-02-21
  • 打赏
  • 举报
回复
1。对于插到头结点前面的判断条件是什么比如if(___)括号在是什么条件?比如插到最后条件则是if(ptr->next = NUUL)
这个没有办法判断,要另外写一个函数。因为你的这个insert函数的大概意思是将一个节点插入到ptr指向的节点之后。按照这个逻辑,符合要求的ptr是无法得到的。

2.应该是可以作为同一种情况的,主要是如果链表为空的时候要做特殊处理
yukazhang 2010-02-21
  • 打赏
  • 举报
回复
对于链表,应该始终有一个head指针指向链表头,要是插入头结点前面就直接插入到head前面然后将head前移就行了。
插到表中和表尾相似。不过如果插到表尾,最后的newNode->next=NULL;
单链表不能得原因就是表尾的next指针指向的是NULL,而不是另一个节点,所以不能完全按插入表中的操作进行。

64,632

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧