25.合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
合并算法
package LeetCode;
public class Solution3 {
public ListNode mergeTwoLists(ListNode l1,ListNode l2){
//1.初始化:定义一个伪节点dum,节点cur指向dum
ListNode dum = new ListNode(0),cur = dum;
//2.循环合并:l1或者l2为空时跳出
while(l1!=null && l2!=null){
if(l1.val<l2.val){
cur.next = l1;
l1 = l1.next;
}else {
cur.next = l2;
l2 = l2.next;
}
cur = cur.next;
}
//3.合并剩余尾部:跳出时有两种情况,即l1为空或是l2为空。
cur.next = l1 !=null ?l1:l2;
return dum.next;
}
}
return dum.next;
}
}
ListNode类
public class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
测试方法
public void main() {
/**
* 输入:1->2->4, 1->3->4
* 输出:1->1->2->3->4->4
*/
ListNode l1 = new ListNode(1, new ListNode(2, new ListNode(4)));
ListNode l2 = new ListNode(1, new ListNode(3, new ListNode(4)));
ListNode listNode = mergeTwoLists(l1, l2);
StringBuilder stringBuilder = new StringBuilder();
while (listNode.next != null) {
stringBuilder.append(listNode.val).append(" -> ");
listNode = listNode.next;
}
stringBuilder.append("null");
System.out.println(stringBuilder.toString());
}