博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Merge Two Sorted Lists
阅读量:5957 次
发布时间:2019-06-19

本文共 2180 字,大约阅读时间需要 7 分钟。

每日算法——leetcode系列


Merge Two Sorted Lists

Difficulty: Easy

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {            }};

翻译

合并两个有序链表

难度系数:简单

合并两个有序链表并返回一个新链表。新的链表的由两个有序的链表的节点组成。

思路

两种思考方式:

  • 先定一个主链表,把另一个链表合并到这个主链表

    假定一个链表dummy, 为方便遍历,设dummy的初始值为-1,next指向l1(主链表),为返回值,还得新那家一个链表tempLink = dummy

    • 如果l1的值比l2小,templink = l1, 再遍历l1->next

    • 如果l1的值比l2大,则把temlink->next = l2, tempLink = tempLink->next, 再把tempLink批回主链表, 这样到最后有可能副链表还不为空,再加到后面就好

  • 直接同时遍历两个链表,再每次取其中小的

    这种思路比较直接,就是同时遍历两个链表, 哪个小用哪个, 再把剩下的放到最后

代码

class Solution {public:    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {        ListNode *p1 = l1,  *p2=l2;        ListNode dummy(-1);        dummy.next = p1;        ListNode *tempLink = &dummy;                while(p1 != nullptr && p2 != nullptr) {            if (p1->val < p2->val) {                tempLink = p1;                p1 = p1->next;            } else {                tempLink->next = p2;                p2 = p2->next;                tempLink = tempLink->next;                tempLink->next = p1;            }        }        if (p2 != nullptr) {            tempLink->next = p2;        }                return dummy.next;    }        ListNode* mergeTwoLists2(ListNode* l1, ListNode* l2) {        ListNode *p1 = l1,  *p2=l2;        ListNode dummy(-1);        dummy.next = nullptr;        ListNode *tempLink = &dummy;                 while(p1 != nullptr && p2 != nullptr) {            if (p1->val < p2->val) {                tempLink->next = p1;                p1 = p1->next;                tempLink = tempLink->next;            } else {                tempLink->next = p2;                p2 = p2->next;                tempLink = tempLink->next;            }        }        if (p2 != nullptr) {            tempLink->next = p2;        } else if ( p1 != nullptr) {            tempLink->next = p1;        }                return dummy.next;    }};

转载地址:http://hnrxx.baihongyu.com/

你可能感兴趣的文章
裸函数naked解析
查看>>
Opencv学习笔记(六)SURF学习笔记
查看>>
IEE数据库kill指定条件的进程
查看>>
【leetcode】Kth Largest Element in an Array (middle)☆
查看>>
算法-表达式求值
查看>>
github 提交报403 forbidden的错误解决
查看>>
jquery 事件冒泡的介绍以及如何阻止事件冒泡
查看>>
兰州大学,财经兰州大学改名
查看>>
CreateFont详细解释
查看>>
Java知多少(92)滚动条
查看>>
【转】crontab定时任务中文乱码问题
查看>>
086设置日期选择器框的显示样式
查看>>
macbook air电池保养方法
查看>>
Qt5官方demo分析集10——Qt Quick Particles Examples - Emitters
查看>>
APP测试体系
查看>>
Python的with...as的用法
查看>>
Android开发UI之EditText+DatePicker带日期选择器的编辑框
查看>>
apt-get方式安装lnmp环境
查看>>
ubuntu 安装 qt等软件
查看>>
js模态窗口
查看>>