題目
題解
整個過程都是不停地交換節點,因此可以嘗試通過遞歸來解決。
遞歸解法要先搞清以下三個內容
- 返回值
- 調用單元做了什么
- 終止條件
在本題中:
- 返回值:交換完成的子鏈表head
- 調用單元做了什么:設需要交換的兩個點為 head 和 next,head 連接后面交換完成的子鏈表,next 連接 head,完成交換
- 終止條件:head為空指針或者next為空指針,也就是當前無節點或者只有一個節點,無法進行交換
ListNode* swapPairs(ListNode* head) {
if (head == NULL || head->next == NULL) {
return head;
}
ListNode *next = head->next;
head->next = swapPairs(next->next);
next->next = head;
return next;
}