用一个指针记录前一个节点(和下一题一起做了)
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
int k = 2;
ListNode *newHead = new ListNode(0);
ListNode *relativeHead = newHead;
ListNode *tail = newHead;
ListNode *p = head;
ListNode *pre = head;
int count = 0;
while(p) {
if(count == k || count == 0) {
relativeHead = tail;
tail = p;
count = 0;
}
pre = p;
p = p->next;
pre->next = relativeHead->next;
relativeHead->next = pre;
count++;
}
if(count != k){
p = relativeHead->next;
relativeHead->next = NULL;
while(p) {
pre = p;
p = p->next;
pre->next = relativeHead->next;
relativeHead->next = pre;
}
}
return newHead->next;
}
};
题目链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/