LeetCode算法21:java 合并两个有序链表

版权声明:可以转载,请注明链接出处 https://blog.csdn.net/xihuanyuye/article/details/85233346

问题
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

思路
思路较为简单,难度在与对两个链表的各种边界情况的处理。

代码

//import utils.delwithNodeList;
//import utils.ListNode;
import Utils.*;

public class _21MergeTwoSortedLists{

public ListNode mergeTwoLists(ListNode L1,ListNode L2){
	
	ListNode head = null;
	ListNode tmp = null;
	
	while(L1!=null||L2!=null){
		
		if(L1!=null&&L2!=null){
				if(L1.val>=L2.val){
					
					if(tmp==null){
						tmp = L2;
						head = tmp;
						L2 = L2.next;
					}else{
						tmp.next = L2;
						tmp = tmp.next;
						L2 = L2.next;
					}
					}else{
						if(tmp==null){
						tmp = L1;
						head = tmp;
						L1 = L1.next;
					}else{
						tmp.next = L1;
						tmp = tmp.next;
						L1 = L1.next;
					}
						}

		}else if(L1!=null&&L2==null){
				if(tmp==null){
						tmp = L1;
						head = tmp;
						return head;
					}else{
						tmp.next = L1;
						return head;
					}
				}else{
					if(tmp==null){
						tmp = L2;
						head = tmp;
						return head;
					}else{
						tmp.next = L2;
						return head;
					}
				}
		}
		return head;
	}

	private ListNode addNode(ListNode head,ListNode tmp,ListNode L){
		
				if(tmp==null){
					tmp = L;
					head = tmp;
					tmp = tmp.next;
					L = L.next;
					}else{
						tmp = L;
						tmp = tmp.next;
						L = L.next;
					}
					System.out.println("hello1");
					//System.out.println(delwithListNode.readList(L2));
					System.out.println(delwithListNode.readList(head));
					System.out.println("hello1");
				return L;
		}

public static void main(String[] arg){
	
	//ListNode L1 = delwithListNode.getNodelist(new int[]{1,2,4});
	//ListNode L2 = delwithListNode.getNodelist(new int[]{1,3,4});
	
	ListNode L1 = delwithListNode.getNodelist(new int[]{1,3});
	ListNode L2 = delwithListNode.getNodelist(new int[]{5,7});
	
	String list1 = delwithListNode.readList(L1);
	String list2 = delwithListNode.readList(L2);
	
	System.out.println(list1);
	System.out.println(list2);
	
	_21MergeTwoSortedLists MergeTwoSortedLists = new _21MergeTwoSortedLists();
	ListNode L3 = MergeTwoSortedLists.mergeTwoLists(L1,L2);
	String list = delwithListNode.readList(L3);
	System.out.println(list);
	}
}

猜你喜欢

转载自blog.csdn.net/xihuanyuye/article/details/85233346