leetCode 21.Merge Two Sorted Lists (合并排序链表) 解题思路和方法

原创 2015年07月06日 19:19:47
Merge Two Sorted Lists 

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.


思路:对两个已排序的单链表合并。算法上比较简单,与归并排序类似。只是数据结构上以前学的,现在忘的比较多,写第一遍的时候比较费力。而且想把重复代码写出方法,但是方法怎么都不能同步改变参数的值,没办法,第一遍力求准确,先A过再说。

代码有点乱,不过理解还是比较方便。如下:

/**
 * 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 head = null;
        ListNode p = null;
        
        //从小到大的顺序合并链表
        while(l1 != null && l2 != null){
            if(l1.val > l2.val){
            	if(head == null){
            		head = p = l2;
            	}else{
            		p.next = l2;
            		p = p.next;
            	}
            	l2 = l2.next;
            }else{
            	if(head == null){
            		head = p = l1;
            	}else{
            		p.next = l1;
            		p = p.next;
            	}
            	l1 = l1.next;
            }
        }
        //如果链表中还有数据,继续合并,以下最多只有一个链表还有数据
        while(l1 != null){
        	if(head == null){
        		head = p = l1;
        	}else{
        		p.next = l1;
        		p = p.next;
        	}
        	l1 = l1.next;
        }
        while(l2 != null){
        	if(head == null){
        		head = p = l2;
        	}else{
        		p.next = l2;
        		p = p.next;
        	}
        	l2 = l2.next;
        }
        p = null;
        return head;
    }
}

顺利A过之后考虑精简代码,因为上面的代码看着实在不舒服,网上参考一些资料,受启发后写出如下代码。

PS:两个代码的效果都差不多。

/**
 * 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 ? l2:l1;
        ListNode head = new ListNode(0);//定义一个头结点
        ListNode p = head;
        ListNode temp = null;
        
        while(l1 != null && l2 != null){
            if(l1.val > l2.val){
                temp = l2;//用一个temp保存现在的l1或l2
                l2 = l2.next;//l1或l2指针后移1位
            }else{
                temp = l1;
                l1 = l1.next;
            }//交换数据
            p.next = temp;
            p = p.next;
        }//temp取不为空的一个(也可能全为空)
        temp = l1 == null ?l2:l1;
        p.next = temp;//将剩余的全部链接即可(上面的方法太啰嗦了)
        return head.next;
    }
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

【leetcode c++】21 Merge Two Sorted Lists

Merge two sorted linked lists and return itas a new list. The new list should be made by splicing to...
  • hqq39
  • hqq39
  • 2015年06月18日 13:37
  • 428

[LeetCode] 021. Merge Two Sorted Lists (Easy) (C++/Python)

[LeetCode] 021. Merge Two Sorted Lists (Easy) (C++/Python)
  • hcbbt
  • hcbbt
  • 2015年03月04日 20:11
  • 3613

LeetCode 21:Merge Two Sorted Lists

LeetCode 21: Merge Two Sorted Lists   Merge two sorted linked lists and return it as a new list. ...
  • sunao2002002
  • sunao2002002
  • 2015年05月27日 23:08
  • 4042

【leetcode】【21】Merge Two Sorted Lists

一、问题描述 Merge two sorted linked lists and return it as a new list. The new list should be made by sp...
  • xiaoliucool1314
  • xiaoliucool1314
  • 2016年02月28日 11:23
  • 235

LeetCode 21 Merge Two Sorted Lists(合并两个已排序的链表)(Linked List)

翻译合并两个排好序的链表,并返回这个新链表。 新链表应该由这两个链表的头部拼接而成。原文Merge two sorted linked lists and return it as a new lis...
  • NoMasp
  • NoMasp
  • 2015年11月10日 20:38
  • 8291

Leetcode #21 Merge Two Sorted Lists 合并有序链表 解题报告

0 题外话嗯,从这次开始我就把题目换一下,改成解题报告了,因为我小节小结总是不分,等有时间也去改下之前的解题报告咯~~我算了下自己的速度,作为一个本学期的额外爱好,到现在21天刷了100题,速度也还算...
  • MebiuW
  • MebiuW
  • 2016年03月23日 20:54
  • 1103

Merge Two Sorted Lists -- LeetCode

原题链接: http://oj.leetcode.com/problems/merge-two-sorted-lists/  这道题目比较简单,经典的链表基本操作。维护两个指针对应两个链表,因为一般会...
  • linhuanmars
  • linhuanmars
  • 2014年02月22日 23:31
  • 16626

leetcode第21题——*Merge Two Sorted Lists

题目 Merge two sorted linked lists and return it as a new list. The new list should be made by splicin...
  • buptlrw
  • buptlrw
  • 2016年02月28日 10:09
  • 547

[C语言][LeetCode][21]Merge Two Sorted Lists

题目Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new list sh...
  • Timsley
  • Timsley
  • 2016年03月04日 08:26
  • 847

21. Merge Two Sorted Lists(python)

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t...
  • qq_28119401
  • qq_28119401
  • 2016年09月18日 21:32
  • 642
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetCode 21.Merge Two Sorted Lists (合并排序链表) 解题思路和方法
举报原因:
原因补充:

(最多只允许输入30个字)