题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
思路
新建一个头指针,然后比较l1和l2的值的大小,不断将节点加入到头指针中,最后,如果还有没有进入头指针的,因为是有序链表,所以,只需要将头指针指向没有完成的链表即可。最后,返回的时候,因为前面我们加了一个头指针,就一定不要把头指针顺便返回了。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
//这个代码不完全是我自己写出来的,因为对于这种指针什么的还是很不熟悉,我是参照官方的代码,结合一下自己的理解,然后写这个,,以后要加强这方面的练习。
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode prehead = new ListNode(-1);
ListNode prev = prehead;
while (l1!=null && l2!=null)
{
if (l1.val<=l2.val)
{
prev.next=l1;
l1=l1.next;
}
else
{
prev.next = l2;
l2 = l2.next;
}
prev=prev.next;
}
//只要有没有合完的,直接将链表末尾指向为合成完的即可,官方代码,这一句真的妙到我了
prev.next = l1 == null ? l2 : l1;
return prehead.next;
}
}