21-合并两个有序链表

        将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。如 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]。

        一般先维护一个头节点,这样可以省掉单独判断输入的两个链表是否为空。

package likouhot;

import leecodeOff.ListNode;

/*
 * 21.合并两个有序链表
 */
public class Demo21 {
     
	public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
          ListNode headNode = new ListNode(0); 
          ListNode temp_l1 = l1;
          ListNode temp_l2 = l2;
          ListNode tail = headNode;
          while(temp_l1 !=null && temp_l2 !=null) {
        	  int val1 = temp_l1.val;
        	  int val2 = temp_l2.val;
        	  if(val1 < val2) {
        		  tail.next = temp_l1;
        		  temp_l1 = temp_l1.next;
        	  }else {
        		  tail.next = temp_l2;
        		  temp_l2 = temp_l2.next; 
        	  }
        	  tail = tail.next;
          }
          if(temp_l1 !=null || temp_l2!=null) {
        	  tail.next = temp_l1==null?temp_l2:temp_l1;
          }
          return headNode.next;
    }
	
	public static void main(String args[]) {
		Demo21 demo = new Demo21();
		ListNode node1 = new ListNode(1);
		ListNode node12 = new ListNode(2);
		ListNode node13 = new ListNode(4);
		node1.next = node12;
		node12.next = node13;
		ListNode node2 = new ListNode(1);
		ListNode node22 = new ListNode(3);
		ListNode node23 = new ListNode(4);
		node2.next = node22;
		node22.next = node23;
		ListNode newNode = demo.mergeTwoLists(node1, node2);
		while(newNode!=null) {
			System.out.println(newNode.val);
			newNode = newNode.next;
		}
	}
	
}

上一篇:链表:两数之和


下一篇:合并两个排序的链表