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

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

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. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {        //在头部定义一个没有意义的节点,可以省去之后的许多if判断        ListNode la = new ListNode(-1), lm = la;        // if(l1==null || l2 == null){        //     return (l1!=null)?l1:l2;        // }        // ListNode la = null,lm=null;        while(l1!=null && l2!=null){            // if(la == null){            //     if(l1.val<=l2.val){            //         la = lm = l1;            //         l1 = l1.next;            //     }            //     else{            //         la = lm = l2;            //         l2 = l2.next;            //     }            //     continue;            // }            if(l1.val<=l2.val){                lm.next = l1;                lm = l1;                l1= l1.next;            }            else{                lm.next = l2;                lm = l2;                l2=l2.next;            }        }        lm.next = (l1!=null)?l1:l2;        return la.next;    }}

下面我们来看递归的写法,当某个链表为空了,就返回另一个。然后核心还是比较当前两个节点值大小,如果l1的小,那么对于l1的下一个节点和l2调用递归函数,将返回值赋值给l1.next,然后返回l1;否则就对于l2的下一个节点和l1调用递归函数,将返回值赋值给l2.next,然后返回l2。

代码如下:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {        if(l1==null || l2 == null){            return (l1!=null)?l1:l2;        }        if (l1.val < l2.val) {            l1.next = mergeTwoLists(l1.next, l2);            return l1;        } else {            l2.next = mergeTwoLists(l2.next, l1);            return l2;        }    }}

 

 

 

转载于:https://www.cnblogs.com/mxk-star/p/7354831.html

你可能感兴趣的文章
第二次作业
查看>>
迷茫中的自己
查看>>
burp suite 的intruder 四种攻击方式
查看>>
机器学习----人脸对齐的算法-ASM.AAM..CLM.SDM
查看>>
自定义文本选中样式
查看>>
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
查看>>
MySQL 数据库 的安装和基本管理
查看>>
note
查看>>
软件测试理论测试用例测试之等价类划分
查看>>
“分析EntityName出错”,视窗设计器你这是闹哪样?
查看>>
codeforces #321 div 2 B. Kefa and Company(尺取法)
查看>>
【POJ1470】Closest Common Ancestors
查看>>
php 利用 soap调用.Net的WebService asmx文件
查看>>
Junit核心——测试集(TestSuite)
查看>>
非GUI模式下运行JMeter和远程启动JMeter
查看>>
js闭包引起的事件注册问题
查看>>
bzoj 1175: The stairways of Saharna
查看>>
2016.7.12 eclispe使用mybatis generator生成代码时提示project E is not exist
查看>>
pandas优化
查看>>
android 7.0 新特性 和对开发者的影响
查看>>