剑指 Offer 25. 合并两个排序的链表(简单)

  • Post author:
  • Post category:其他


思路:

创建一个新链表,将排好序的节点一一加入

代码:

/**
 * 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 node=new ListNode(0);
		ListNode hair=node;
		ListNode p1=l1,p2=l2;
		
		while(p1!=null&&p2!=null){
			if(p1.val<=p2.val){
				hair.next=p1;
				p1=p1.next;
			}
			else{
				hair.next=p2;
				p2=p2.next;
			}
			hair=hair.next;
		}
		
		hair.next=p1==null?p2:p1;
		return node.next;
    }
}

分解:

1)创建一个节点node和一个指向该节点的指针,指针用于加入,node用于返回最终结果

2)为2个链表也分别创建一个指针

3)最后用一个三元表达式将剩下的不为null的部分全部加入到链表中,同一个链表中剩下的部分都是排好序的

hair.next=p1==null?p2:p1;

复杂度分析:

时间复杂度:O(N)需要遍历N个节点

空间复杂度:O(N)额外创建了一个N个节点的链表


第一次就完整写出来通过啦!!



版权声明:本文为di_ko原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。