AcWing34:合并两个排序的链表

Posted 劭兮劭兮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing34:合并两个排序的链表相关的知识,希望对你有一定的参考价值。

问题

原题链接:合并两个排序的链表

解决办法

(二路归并) O(n)

  • 新建虚拟头结点dummy,设置current指针指向dummy,current 指针负责记录当前已经确定位置的元素;
  • 若当前 current1 指针指向的结点的值val比 current2 指针指向的结点的值val小,则令 current 的next指针指向 current1,且 current1 后移;
    注意:current 的位置也需要后移;因为目前又有一位结点的位置已经确定;

  • 否则指向 current2 ,且 current2 后移。
    注意:current 的位置也需要后移;因为目前又有一位结点的位置已经确定;

  • 循环到 current1 为空,或者 current2 为空
  • 如果 current1 为空,则将 current.next = current2;如果 current2 为空,则将 current.next = current1;
  • 最终结果图

JAVA代码实现

/**
 * Definition for singly-linked list.
 * public class ListNode 
 *     int val;
 *     ListNode next;
 *     ListNode(int x)  val = x; 
 * 
 */
class Solution 
    public ListNode merge(ListNode l1, ListNode l2) 
        if(l1 == null) 
        	return l2;
        
        if(l2 == null) 
        	return l1;
        
        
//        创建虚拟头结点
        ListNode dummy = new ListNode(0);
//        用来记录当前指针
        ListNode current = dummy;
        ListNode current1 = l1;
        ListNode current2 = l2;
        
        while(current1 != null && current2 != null) 
        	if(current1.val <= current2.val) 
        		current.next = current1;
        		current1 = current1.next;
        	else 
        		current.next = current2;
        		current2 = current2.next;
        	
        	
//        	current需要继续往下移动
        	current = current.next;
        
        
        if(current1 == null) 
        	current.next = current2;
        else 
        	current.next = current1;
        
        
        return dummy.next;
    

小记:
原题链接:合并两个排序的链表

以上是关于AcWing34:合并两个排序的链表的主要内容,如果未能解决你的问题,请参考以下文章

AcWing34:合并两个排序的链表

JZ-016-合并两个排序的链表

剑指Offer 合并两个排序的链表

剑指Offer:合并两个排序的链表25

合并两个排序的链表

最强解析面试题:合并两个排序的链表