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