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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zj15527620802/article/details/83316692

合并两个有序链表是一道很常见的提醒,可以利用分治思想用递归实现,或者是不用递归,递归比较难理解。下面给出非递归的方法。

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
  //新建一个头节点,用来存合并的链表。
    	ListNode head=new ListNode(-1);
    	head.next=null;
    	ListNode root=head;
    	while(list1!=null&&list2!=null) {
    		if(list1.val<list2.val){
    			head.next=list1;
    			head=list1;
    			list1=list1.next;
    		}
    		else {
    			head.next=list2;
    			head=list2;
    			list2=list2.next;
    		}
    	}
    	//如果有一个链表为空,另一个链表非空,则应该把非空链表合并到链表尾部。
    	if(list1!=null) {
    		head.next=list1;
    	}
    	if(list2!=null) {
    		head.next=list2;
    	}
		return root.next;
      
    }
}

      首先我们创建一个新的节点,用来存合并新的链表,这样比较好实现,然后分别比较链表1和2的值,这样其实是打乱了原来的两个链表。

猜你喜欢

转载自blog.csdn.net/zj15527620802/article/details/83316692
今日推荐