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

思路:

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

 

代码:

/**
 * 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个节点的链表

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值