Leetcode刷题记——21. Merge Two Sorted Lists(合并两有序链表)

来源:互联网 发布:域名授权 编辑:程序博客网 时间:2024/06/01 07:25

一、题目叙述:

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.

Subscribe to see which companies asked this question

二、解题思路:

easy题,合并两个有序链表,要求新的链表由两个给定链表的结点拼接而成,很简单,有点类似于归并排序。

(1)两个指针对应于两个链表,比较大小,小的结点加入新链表,并且其指针后移。

(2)考虑一个链表结点加入完毕,剩另一链表的情况

(3)考虑两个链表都为空或者一个链表为空的情况。

三、源码:

/** * 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)     {    ListNode p;    if (l1 == null && l2 == null) return null;    if (l1 == null) return l2;    if (l2 == null) return l1;    if (l1.val <= l2.val)     {    p = l1;    l1 = l1.next;    }    else     {    p = l2;    l2 = l2.next;    }    ListNode merge = p;    while (l1 != null && l2 != null)    {    if (l1.val <= l2.val)    {    p.next = l1;    p = p.next;    l1 = l1.next;    }    else    {    p.next = l2;    p = p.next;    l2 = l2.next;    }    }    if (l1 != null)    p.next = l1;    if (l2 != null)    p.next = l2;    return merge;    }    public void print(ListNode root)       {                  System.out.print(root.val + "\t");                  if (root.next != null)                      print(root.next);      }      public static void main(String args[])    {     ListNode l1 = new ListNode(2);           ListNode a = l1;           a.next = new ListNode(3);           a = a.next;           a.next = new ListNode(4);           ListNode l2 = new ListNode(1);           ListNode b = l2;           b.next = new ListNode(6);           b = b.next;           //b.next = new ListNode(4);           Solution s = new Solution();           s.print(s.mergeTwoLists(l1, l2));           //s.print(l1);       }      }


0 0