赞
踩
目录
合并两个有序链表这道题,可以说是--链表专题--,比较经典的一道题,也是在面试中频率较高的一道题目,通常在面试中,面试官可能会要求我们写出多种解法来实现这道题目,所以大家需要对这道题目非常熟悉哦!!
本片博客就来详细的讲讲解一下 合并两个有序链表 的多种实现方法,让我们的面试变的更加顺利!!!
首先,先来了解一下什么是 哨兵位---头节点 ?
哨兵位---头节点的作用:
解题思路:
图例: list1: 1 , 2, 4 list2: 3 ,5 , 6
代码:
- class Solution {
- public:
- ListNode* mergeTwoLists(ListNode* list1, ListNode* list2)
- {
- // 创建一个新的链表 ,并初始化头节点 为-1 ---- 这是一个 哨兵位
- // 哨兵位,不存储数据
- ListNode* pre_head = new ListNode(-1);
- // 维护一个 cur 指针,指向当前较小的节点
- ListNode* cur = pre_head;
- // 注意巧妙的利用 哨兵位的头节点
- while(list1!=nullptr && list2!=nullptr)
- {
- // 将较小的节点进行 尾插
- if(list1->val < list2->val)
- {
- cur->next = list1;
- list1 = list1->next;
- }
- else
- {
- cur->next = list2;
- list2 = list2->next;
- }
-
- cur = cur->next;
- }
-
- // 判断谁没结束,将它直接连接在 cur->next上
- if(list1!=nullptr)
- {
- cur->next = list1;
- }
- else
- {
- cur->next = list2;
- }
- // 注意返回 链表的头节点,而不是 哨兵节点
- return pre_head->next;
- }
- };

解题思路:
我们记两个链表的头节点分别为 list1
和 list2
,在 合并两个链表 的时候会遇到以下三种情况:
list1
为空,直接返回 list2
;list2
为空,直接返回 list1
;两节点都不为空,那么又会分为两种情况:
list2
节点值小于 list1
节点值时,有 list2->next = mergeTwoLists(list1, list2->next)
,并返回 list1
。以上这种将问题转换为原问题的子问题的方法,称为递归方法。递归方法是一种边调用边填充的方法。
代码:
- /**
- * Definition for singly-linked list.
- * struct ListNode {
- * int val;
- * ListNode *next;
- * ListNode() : val(0), next(nullptr) {}
- * ListNode(int x) : val(x), next(nullptr) {}
- * ListNode(int x, ListNode *next) : val(x), next(next) {}
- * };
- */
- class Solution {
- public:
- ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
- if (list1 == nullptr) {
- return list2;
- }
- else if (list2 == nullptr) {
- return list1;
- }
- else if (list1->val < list2->val) {
- list1->next = mergeTwoLists(list1->next, list2);
- return list1;
- }
- else {
- list2->next = mergeTwoLists(list1, list2->next);
- return list2;
- }
- }
- };

最后我们来总结一下本文所介绍的内容,本文讲解来一道力扣中有关链表合并的题目,这道题目是校招笔试面试中有关链表章节非常高频的一道题目,大家下去一定要自己再画画图,分析一下,把这段代码逻辑自己实现一遍,才能更好地掌握
以下就是我对 合并有序链表 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对 链表专题 的理解,请持续关注我哦!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。