交换节点
24. 两两交换链表中的节点

交换节点嘛,来一个哑结点再来三个指针pre p q

1 2 3 4
| 这个是交换的步骤 pre->next=q; p->next=q->next; q->next=p;
|
1 2 3 4
| 这个是往下的步骤 pre=p; p=p->next; q=q->next;
|
这里要注意的是在每次循环中不能直接q=q->next,否则有可能让q指到null->next去
因此只要在循环开始处再定义就可以防止错误
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| struct ListNode* swapPairs(struct ListNode* head) { struct ListNode*dummy=malloc(sizeof(struct ListNode)); dummy->val=0; dummy->next=head; struct ListNode*pre=dummy; struct ListNode*p=head;
while(p&&p->next){ struct ListNode* q = p->next; pre->next=q; p->next=q->next; q->next=p;
pre=p; p=p->next; }
return dummy->next; }
|