【发布时间】:2011-11-29 05:25:12
【问题描述】:
你能帮我调试这段代码来交换双链表的两个节点吗?我无法弄清楚我做错了什么:(
代码如下:
dll* swap_node(dll *head , dll *node1 , dll *node2) {
dll *tmp;
int flag=0;
if(node1->prev!=NULL) {
node1->prev->next=node2;
} else {
flag=1;
}
if(node1->next!=NULL) {
node1->next->prev=node2;
}
if(node2->prev!=NULL) {
node2->prev->next=node1;
}
if(node2->next!=NULL) {
node2->next->prev=node1;
}
tmp=node1->next;
node1->next=node2->next;
node2->next=tmp;
tmp=node1->prev;
node1->prev=node2->prev;
node2->prev=tmp;
if(flag==1) {
head=node2;
}
return head;
}
提前致谢
【问题讨论】:
-
如果node1和node相邻怎么办?即:node1->next == node2 && node2->prev == node1。在这种情况下,指针会发生什么?
标签: c data-structures linked-list