关于双向链表插入的疑问?

dremi 2008-04-23 10:09:20
双向链表:要想在 指针P指向的节点后 插入一个 指针newNode指向 的节点:下面几个插入有什么区别? 或者那些是错误的?哪个更好?
p->【 】<->【 】<->【 】->null;
newNode->【 】
1.
newNode->next = p->next;
p->next = newNode->next;
if(p->next)
p->next->prev = newNode;
newNode->prev = p;

2.
newNode->next = p->next;
if(p->next)
p->next->prev = newNode;
p->next = newNode;
newNode->prev = p;

3.
newNode->next = p->next;
newNode->prev = p;
if(p->next)p->next->prev = newNode;
p->next = newNode;

4.
if(p->next)
p->next->prev = newNode;
newNode->next = p->next;
p->next = newNode;
newNode->prev = p;
...全文
99 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
LIANGZIYINGXIONG 2008-04-28
  • 打赏
  • 举报
回复
第一个是顺序有问题,
链表赋值最好画个图
dremi 2008-04-25
  • 打赏
  • 举报
回复
1.那个地方是打错了,应该是p->next = newNode,
如果是这样,也是对的吧

郁闷的是,我在面试时说了其中两个,他说了我错了,但我始终感觉没有错。还和面试官一直争!晕!
dk8478 2008-04-24
  • 打赏
  • 举报
回复

1.
newNode->next = p->next;
p->next = newNode->next; //p->next = newNode
if(p->next)
p->next->prev = newNode; //p->next 值已变
newNode->prev = p;

2.
newNode->next = p->next;
if(p->next)
p->next->prev = newNode;
p->next = newNode;
newNode->prev = p;

3.
newNode->next = p->next;
newNode->prev = p;
if(p->next)p->next->prev = newNode;
p->next = newNode;

4.
if(p->next)
p->next->prev = newNode;
newNode->next = p->next;
p->next = newNode;
newNode->prev = p;

就是1有问题,其他2,3,4都没什么区别吧,这插入操作就只有一个顺序很重要:修改后一节点的相应指针域时不能先把当前节点的next指针改变,其他顺序倒不是很重要。

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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