题目 : 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
解题思路 :
1.依据以上两个升序链表进行拼接;
2.先定义一个傀儡节点newHead,用来存储一开始的headA
3.定义一个tmp,用来实现对节点引用的操作
4.要是发现headA.val<headB.val,则tmp.next存储headA,headA继续向前走,tmp也向前走;
5.要是发现headA.val>headB.val,则实现tmp中的next链接此时那个大的数据的节点; 即tmp.next=headB,headB向前走;tmp也向前走;
6.循环实现两个链表的链接,循环出口为当发现有一个head为空,即走完
7.如果headA不为空,tmp.next=headA,实现B链表的最后一个节点的链接
8.如果headB不为空,tmp.next=headB,实现A链表的最后一个节点的链接
9.这样就实现了两个链表的链接啦;
代码如下 :
//合并两个有序链表
public static ListNode mergeTwoLists(ListNode headA, ListNode headB) {
ListNode newHead=new ListNode(-1); //定义一个傀儡节点
ListNode tmp=newHead; //tmp引用傀儡节点
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;
}