(一)题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
(二)解题思路
建立一个新的头结点start,再设置一last指针,该指针指向当前链表新链表的末尾, 比较两链表当前头指针所指值的大小,last指针指向值较小的节点,并使last=last.next,被选中链表中的指针向前移一部。(利用原节点,不用新生成节点)
(三)代码实现
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode listNode = new ListNode();
ListNode last=listNode;
if (l1==null||l2==null){
return l1==null?l2:l1;
}
while (l1!=null&&l2!=null){
if (l1.val<=l2.val){
last.next=l1;
l1=l1.next;
}
else{
last.next=l2;
l2=l2.next;
}
last=last.next;
}
while (l1!=null){
last.next=l1;
l1=l1.next;
last=last.next;
}
while (l2!=null){
last.next=l2;
l2=l2.next;
last=last.next;
}
return listNode.next;
}
}
//node节点数据结构
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}