題目描述
給定一個鏈表,兩兩交換其中相鄰的節點,並返回交換后的鏈表。
示例:
給定 1->2->3->4
, 你應該返回 2->1->4->3
.
說明:
- 你的算法只能使用常數的額外空間。
- 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
解題思路
利用遞歸的思想,依次交換鏈表中的節點對。具體對於每個節點來說:
- 若該節點為NULL,則直接返回NULL
- 若該節點的下一個節點為NULL,則直接返回該節點
- 交換該節點與下一個節點,利用輔助指針記錄該節點的下一個節點,並遞歸的交換接下來的節點對
代碼
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(!head) return NULL; 13 if(!head->next) return head; 14 ListNode* temp=head->next; 15 head->next=swapPairs(temp->next); 16 temp->next=head; 17 return temp; 18 } 19 };