题解 | #合并两个排序的链表#
合并两个排序的链表
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;