You are given the heads of two sorted linked lists
list1
andlist2
.Merge the two lists in a one sorted list. The list should be made by splicing together the nodes of the first two lists.
Return the head of the merged linked list.
Example 1:
Input: list1 = [1,2,4], list2 = [1,3,4] Output: [1,1,2,3,4,4]Example 2:
Input: list1 = [], list2 = [] Output: []Example 3:
Input: list1 = [], list2 = [0] Output: [0]
题目大意:
这道题要你将两个非递减排序的链表合并为一个非递减排序的链表
实现思路:
依次比较两个链表的值,并将值较小的结点插入新的链表中。
实现代码:
/**
* 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:
void attach(int a,ListNode** p1,ListNode** p3){
ListNode* t;
t=(ListNode*)malloc(sizeof(struct ListNode));
t->val=a;
t->next=NULL;
(*p3)->next=t;
(*p3)=t;
(*p1)=(*p1)->next;
}
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode* p;
ListNode* t;
ListNode* t1=list1;
ListNode* t2=list2;
p=(ListNode*)malloc(sizeof(struct ListNode));
p->next=NULL;
ListNode* t3=p;
while(t1&&t2){
if(t1->val<t2->val) attach(t1->val,&t1,&t3);
else if(t1->val>t2->val) attach(t2->val,&t2,&t3);
else{
attach(t1->val,&t1,&t3);
attach(t2->val,&t2,&t3);
}
}
while(t1) attach(t1->val,&t1,&t3);
while(t2) attach(t2->val,&t2,&t3);
t=p;
p=p->next;
free(t);
return p;
}
};
最开始犯了两个错误:
1、传入attach函数中的两个指针在函数中是要被改变指向的,因此应该用二重指针。
2、attach函数中'>'和'<' 两个符号用反了,这个错就很让人无语。。。。。
还好顺利解决了,这也是我完成的第一道LeetCode上的题