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

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;
...全文
67 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过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指针改变,其他顺序倒不是很重要。
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-23 10:09
社区公告
暂无公告