合并两个有序链表

简介: 合并两个有序链表

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

 

今天和大家聊的问题叫做合并两个有序链表,我们先来看题面:

https://leetcode-cn.com/problems/merge-two-sorted-lists/

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

题意

 

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

 

样例

 

 

输入:1->2->4, 1->3->4

输出:1->1->2->3->4->4

题解

两个有序链表的排序,实际上可以看成一个单链表使用归并排序的最后一个环节:“将两个排好序的子序列合并为一个子序列:每次都是从未比较的两个子序列的最小值中选出一个更小值”。

 

/**

* Definition for singly-linked list.

* public class ListNode {

* int val;//当前节点的值

* ListNode next;//下一个节点的引用值

* ListNode(int x) { val = x; }

* }

*/

class Solution {

   public ListNode mergeTwoLists(ListNode l1, ListNode l2) {

       ListNode temp=new ListNode(0);

       ListNode head=temp;//保留头节点的引用

       while(l1!=null&&l2!=null){

          if(l1.val<l2.val)

          {

              temp.next=l1;

              l1=l1.next;

          }

          else

          {

              temp.next=l2;

              l2=l2.next;

          }

          temp=temp.next;

       }

       if(l1==null) temp.next=l2;//l1子序列为空,则直接拼届l2

       if(l2==null) temp.next=l1;

       return head.next;//返回头节点指向的序列

   }

}

 

相关文章
|
3月前
leetcode-21:合并两个有序链表
leetcode-21:合并两个有序链表
24 0
LeetCode | 21. 合并两个有序链表
LeetCode | 21. 合并两个有序链表
|
3月前
leetcode:21. 合并两个有序链表
leetcode:21. 合并两个有序链表
11 0
|
4月前
|
算法 程序员
【算法训练-链表 二】【合并链表】合并两个有序链表、合并K个有序链表
【算法训练-链表 二】【合并链表】合并两个有序链表、合并K个有序链表
28 0
|
4月前
|
算法
leetcode:合并两个有序链表
leetcode:合并两个有序链表
|
5月前
21.合并两个有序链表(LeetCode)
21.合并两个有序链表(LeetCode)
|
5月前
|
C++
合并有序链表C++递归
合并有序链表C++递归
|
7月前
|
C++
LeetCode 21.合并两个有序链表
LeetCode 21.合并两个有序链表
36 0
|
10月前
leetcode:21.合并两个有序链表
easy级别的题目,熟悉链表的话很快就可以做出来,只需要定义一个空节点,然后利用递归去找到l1和l2中值较小的节点,然后作为这个空节点的next节点即可,这样最后返回的这个空节点就是从小到大排序的链表了。
31 0
|
11月前
|
存储
6-1 两个有序链表序列的合并
6-1 两个有序链表序列的合并
83 0