题解 | #合并两个排序的链表#
合并两个排序的链表
https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
public ListNode Merge (ListNode pHead1, ListNode pHead2) {
// write code here
ListNode dummy = new ListNode(0);
ListNode head = dummy;
ListNode cur=head;
if(pHead1==null){
return pHead2;
}
if(pHead2==null){
return pHead1;
}
while(pHead1!=null&&pHead2!=null){
if(pHead1.val<pHead2.val){
cur=pHead1;pHead1=pHead1.next;
}else{cur=pHead2;pHead2=pHead2.next;}
head.next=cur;
head=head.next;
cur=cur.next;
}
if(pHead1==null){
cur=pHead2;
head.next=cur;
}
if(pHead2==null){
cur=pHead1;
head.next=cur;
}
return dummy.next;
}
}
其实这题思路还是比较清晰的,比较两个链表的值,小的就放入新链表。但是要注意一个链表已经遍历完,一个链表还剩一个元素的情况;第二点就是返回值不是head,一定要提前创建一个不变的点,将其指向开头。ListNode dummy = new ListNode(0);
ListNode head = dummy;这样是让head存在,但是不为null,否则用head.null会报错;当然了,也可以不固定开头的前一个元素,固定开头也是可行的,例如:ListNode head =new ListNode(0);
ListNode dummy = head;
查看20道真题和解析