leetcode:合并两个有序链表

题目描述

解题思路

先新建一个链表,遍历两个链表,每次将较小值插入新链表,移动较小链表的指针,直至一链表遍历完,再插入剩余元素

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* (struct ListNode* l1, struct ListNode* l2) {
if (!l2)
return l1;
if (!l1)
return l2;
struct ListNode *p1,*p2=l2,*p3,*l3=NULL,*head1,*head2;
head1=(struct ListNode*)malloc(sizeof(struct ListNode));
head2=(struct ListNode*)malloc(sizeof(struct ListNode));
head1->next=l1;head2->next=l2;
l3=p3=head1;
while(p1&&p2)
{
if(p1->val<=p2->val)
{
p3->next=p1;p3=p1;p1=p1->next;
}
else
{
p3->next=p2;p3=p2;p2=p2->next;
}
}
p3->next=p1?p1:p2;
return l3->next;
}