习题
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
心路历程
我的想法是逐个比较两个链表各项的大小(模拟过程:L1第一项【1】比较L2第一项【1】相等——>执行L2的第一项插入到L1的第二项,此时的L1[1,1,2,4],L2[1,3,4],L1需指向下一个结点,两表指向下一个结点,循环过程,循环至L2完)
代码段
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
struct ListNode newhead, *p1, *p2;
newhead.next = l1;
l1 = &newhead;
while(l2 != NULL) {
p1 = l1->next;
p2 = l2->next;
if(p1 == NULL) {
l1->next = l2;
break;
}
if(l2->val <= p1->val) {
l2->next = l1->next;
l1->next = l2;
l2 = p2;
}
l1 = l1->next;
}
return newhead.next;
}