题目:合并两个有序链表,将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
合并两个有序链表
- 1.分析
- 2.具体步骤
- 3.代码实现
- 首先定义一个傀儡结点newHead,让中间结点tmp指向它,两个链表头结点headA和headB
- 当两个表都不为空就进入循环
- 首先就将表headA.val和headB.val进行比较,谁小谁就放在newHead的后面,然后头结点后移,tmp后移
- 循环走完,当两个表有一个为空时,谁不为空,tmp.next就等于谁
public static ListNode mergeTwoLists(ListNode headA, ListNode headB) {
ListNode newHead = new ListNode(-1);
ListNode tmp = newHead;
while (headA != null && headB != null) {
if (headA.val < headB.val) {
tmp.next = headA;
headA = headA.next;
tmp = tmp.next;
} else {
tmp.next = headB;
headB = headB.next;
tmp = tmp.next;
}
}
if (headA != null) {
tmp.next = headA;
}
if (headB != null) {
tmp.next = headB;
}
return newHead.next;
}
测试:
public static void main(String[] args) {
MylinkedList mylinkedList1 = new MylinkedList();
mylinkedList1.addLast(12);
mylinkedList1.addLast(23);
mylinkedList1.addLast(34);
mylinkedList1.addLast(45);
mylinkedList1.addLast(56);
System.out.println(" mylinkedList1:");
mylinkedList1.display();
MylinkedList mylinkedList2 = new MylinkedList();
mylinkedList2.addLast(13);
mylinkedList2.addLast(24);
mylinkedList2.addLast(30);
System.out.println(" mylinkedList2:");
mylinkedList2.display();
ListNode ret=mergeTwoLists(mylinkedList1.head,mylinkedList2.head);
System.out.println("拼接后:");
mylinkedList1.display2(ret);
}



