将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
一个大佬写的c++代码
我本来看不懂,结果自己画了两个链表,手动"运行"了一下,只能感慨大佬就是大佬!!!!!呜呜呜呜,膜拜!
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode newHead(0); //链表的初始化 ListNode *p = new ListNode(0);需要有delete操作
ListNode *pi= &newHead;
while(l1&&l2){
if(l1->val>l2->val)swap(l1,l2);//保证指针l2指的值大
pi->next=l1;
l1=l1->next;
pi=pi->next;
}
pi->next=l1?l1:l2;
return newHead.next;
}
};
官方的Java代码
真是一个比一个牛,不过Java写代码好像有钱人啊,啥功能的函数都有,啥问题都能用几个函数解决。
/**
* 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) {
if(l1==null){
return l2;
}
else if(l2==null){
return l1;
}
else if(l1.val<l2.val){
l1.next= mergeTwoLists(l1.next,l2);
return l1;
}
else
{
l2.next= mergeTwoLists(l1,l2.next);
return l2;
}
}
}