Swap Nodes in Pairs
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.
入门题,注意:
1 保存next节点
2 需要使用三个节点指针
3 保存好链表头指针
/**
* 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)
{
if (!head || !head->next) return head;
ListNode *pre = head->next;
ListNode *cur = pre->next;
pre->next = head;
head->next = cur;
head = pre;
pre = pre->next;
while (pre)
{
ListNode *post;
cur = pre->next;
if (cur && cur->next) post = cur->next;
else break;
pre->next = post;
pre = post->next;
post->next = cur;
cur->next = pre;
pre = cur;
}
return head;
}
};
2014-1-25 update
ListNode *swapPairs(ListNode *h)
{
ListNode dummy(0);
dummy.next = h;
ListNode *pre = &dummy;
while (h && h->next)
{
ListNode *t = h->next->next;
pre->next = h->next;
h->next->next = h;
h->next = t;
pre = h;
h = t;
}
return dummy.next;
}