递归算法:合并与反转链表的艺术

张开发
2026/4/20 2:19:17 15 分钟阅读

分享文章

递归算法:合并与反转链表的艺术
合并两个有序链表合并两个有序链表是将两个升序排列的链表合并成一个新的升序链表。使用递归方法时核心思路是比较两个链表的头节点值选择较小的节点作为新链表的头然后递归地合并剩余部分。如果其中一个链表为空直接返回另一个链表作为结果。递归过程如果链表1为空返回链表2。如果链表2为空返回链表1。否则比较链表1和链表2的头节点值如果链表1的头节点值较小则将链表1的头节点作为新头递归合并链表1的剩余部分和链表2。否则将链表2的头节点作为新头递归合并链表1和链表2的剩余部分。C代码实现struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(nullptr) {} }; ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (l1 nullptr) return l2; // 链表1为空返回链表2 if (l2 nullptr) return l1; // 链表2为空返回链表1 if (l1-val l2-val) { l1-next mergeTwoLists(l1-next, l2); // 递归合并剩余部分 return l1; } else { l2-next mergeTwoLists(l1, l2-next); // 递归合并剩余部分 return l2; } }https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKP0https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKPGhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKPYhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKQChttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKQOhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKRPhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKS3https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKSMhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKTGhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKTRhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKUAhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKUQhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKV7https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKW1https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKWHhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKWXhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKXJhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKY2https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKYJhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKZ1https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKZPhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL05https://gitee.com/Guhuitao/resjtrhtr/issues/IJAL0Jhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL0Vhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL17https://gitee.com/Guhuitao/resjtrhtr/issues/IJAL1Hhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL1Xhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL2Ahttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL2Ihttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL2R反转链表反转链表是将链表节点的顺序完全倒置。使用递归方法时核心思路是递归到链表的末尾最后一个节点然后从后向前调整指针方向。具体步骤是递归调用直到当前节点的下一个节点为空即尾节点此时该节点成为新链表的头节点然后逐层返回修改指针指向。递归过程递归终止条件如果当前节点为空或下一个节点为空即尾节点返回当前节点作为新头。递归调用对当前节点的下一个节点进行递归得到反转后的新链表。调整指针将当前节点的下一个节点的指针指向当前节点实现反转。清除当前节点的原始指针避免循环引用。C代码实现ListNode* reverseList(ListNode* head) { if (head nullptr || head-next nullptr) { return head; // 终止条件空节点或尾节点返回头节点 } ListNode* newHead reverseList(head-next); // 递归到末尾 head-next-next head; // 调整指针反转方向 head-next nullptr; // 清除原始指针 return newHead; // 返回新头节点 }https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKP0https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKPGhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKPYhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKQChttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKQOhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKRPhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKS3https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKSMhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKTGhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKTRhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKUAhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKUQhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKV7https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKW1https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKWHhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKWXhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKXJhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKY2https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKYJhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAKZ1https://gitee.com/Guhuitao/resjtrhtr/issues/IJAKZPhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL05https://gitee.com/Guhuitao/resjtrhtr/issues/IJAL0Jhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL0Vhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL17https://gitee.com/Guhuitao/resjtrhtr/issues/IJAL1Hhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL1Xhttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL2Ahttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL2Ihttps://gitee.com/Guhuitao/resjtrhtr/issues/IJAL2R以上代码均使用递归实现符合递归、搜索与回溯的主题。在实际应用中注意链表节点定义的正确性并处理边界情况如空链表。

更多文章