一、题目
函数原型:
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
二、思路
合并两个有序链表为一个新的升序链表,只需要遍历两个有序链表并比较结点值大小,依次将较小的结点尾插到新链表即可。
三、代码
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){ struct ListNode *newhead=NULL;//新链表 struct ListNode *tail=NULL;//新链表尾指针 struct ListNode *cur1=list1;//遍历指针1 struct ListNode *cur2=list2;//遍历指针2 while(cur1&&cur2) { if(cur1->val<=cur2->val)//选取较小结点尾插 { if(tail==NULL)//尾指针为空,先要将插入的结点作为头结点 { newhead=tail=cur1; } else { tail->next=cur1; tail=cur1; } cur1=cur1->next; } else { if(tail==NULL) { newhead=tail=cur2;//尾指针为空,先要将插入的结点作为头结点 } else { tail->next=cur2; tail=cur2; } cur2=cur2->next; } } if(cur1)//链表1还有剩余结点,尾插到新链表 { if(tail==NULL) { newhead=tail=cur1; } else { tail->next=cur1; } } if(cur2)//链表2还有剩余结点,尾插到新链表中 { if(tail==NULL) { newhead=tail=cur2; } else { tail->next=cur2; } } return newhead; }