问题描述
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
思路
遍历链表,每个值变化一下位置,同时需要保留这次的第二个值的指针以便下一轮更改指向。
代码
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head==0) return head;
ListNode* p = head;
ListNode* q = head->next;
ListNode* t =0;
bool isInit = true;
while(q) {
// 交换p、q
swap(p, q);
if(isInit) {
head = q;
isInit = false;
}
if(t){
t->next=q;
t = p;
}
else t = p;
p = p->next;
if(p) {
q = p->next;
} else {
break;
}
}
return head;
}
void swap(ListNode* p, ListNode* q) {
p->next = q->next;
q->next = p;
}
};