【链表】24. 两两交换链表中的节点
题目:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4
, 你应该返回 2->1->4->3
.
解答:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* swapPairs(ListNode* head) { 12 if (NULL == head || NULL == head->next) 13 { 14 return head; 15 } 16 17 ListNode *ppre = NULL; 18 ListNode *prev = head; 19 ListNode *curr = head->next; 20 21 while (curr) 22 { 23 // left at least 2 node 24 prev->next = curr->next; 25 curr->next = prev; 26 if (ppre) 27 { 28 ppre->next = curr; 29 } 30 else 31 { 32 head = curr; 33 } 34 35 ppre = prev; 36 prev = prev->next; 37 if (prev) 38 { 39 curr = prev->next; // left at least 1 node 40 } 41 else 42 { 43 curr = NULL; // none left 44 } 45 } 46 47 return head; 48 } 49 };