题目
思路
链表元素交换,这里的思路遵循了cleancode手册上的思路,为链表增加一个头节点,然后以从头节点开始的三个节点作为一组来进行交换。这里主要考虑的是边界问题。
将新增的头节点作为pre
,head作为p
,仅当p
不为空并且p
之后有节点是才进行交换。
下面的交换就是普通的链表next
的赋值,但需要重新定位,以便能进行下一次循环。
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode *dump = new ListNode(0);
ListNode *pre = dump;
dump -> next = head;
ListNode *p = head;
while(p && p -> next){
ListNode *q = p -> next;
ListNode *r = q -> next;
pre -> next = q;
q -> next = p;
p -> next = r;
pre = p;
p = r;
}
return dump -> next;
}
};