合并两个排序的链表(第16题)

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

ac:100%

思路:遍历链表list1,一个一个插入到list2中

public class A16合并两个排序的链表 {
	//测试
	public static void main(String[] args) {
		ListNode16 node1 = new ListNode16(1);
		ListNode16 node2 = new ListNode16(3);
		ListNode16 node3 = new ListNode16(6);
		ListNode16 node4 = new ListNode16(9);
		ListNode16 node5 = new ListNode16(11);
		node1.next = node2;
		node2.next = node3;
		node3.next = node4;
		node4.next = node5;
		
		ListNode16 node11 = new ListNode16(2);
		ListNode16 node12 = new ListNode16(5);
		ListNode16 node13 = new ListNode16(8);
		ListNode16 node14 = new ListNode16(13);
		ListNode16 node15 = new ListNode16(20);
		node11.next = node12;
		node12.next = node13;
		node13.next = node14;
		node14.next = node15;
		
		ListNode16 merge = Merge(node1,node11);
		
		System.out.println(merge);
		
	}
	
    public static ListNode16 Merge(ListNode16 list1,ListNode16 list2) {
        if(list1 == null) {
        	return list2;
        }
        if(list2 == null) {
        	return list1;
        }
        
        //遍历链表list1,一个一个插入到list2中
        ListNode16 pre = list2,next = list2.next,node = list1,head = list2,temp;
        while(node != null) {
        	if(next != null) {
        		if(node.val < pre.val) {//一开始list2头结点小于list1头结点
	        		head = list1;
	        		temp = node.next;
	        		node.next = pre;
	        		
	        		next = pre;
	        		pre = node;
	        		node = temp;
	        		
	        	} else if(node.val >=pre.val && node.val <=next.val) {
	        		pre.next = node;
	        		temp = node.next;
	        		node.next = next;
	        		
	        		pre = node;
	        		node = temp;
	        	} else {
	        		pre = next;
	        		next = next.next;
	        	}
        	} else {
        		if(node.val >= pre.val) {
        			pre.next = node;
        			break;
        		} else {
        			//只有一开始有可能进入这里
        			head = list1;
        			temp = node.next;
        			node.next = pre;
        			next = pre;
        			pre = node;
        			
        			node = temp;
        		}
        	}
        }
        
        return head;
    }

	
}

class ListNode16 {
    int val;
    ListNode16 next = null;

    ListNode16(int val) {
        this.val = val;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值