交换节点

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

image-20241104110351229

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

image-20241104110501890

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;
}