一、题目
函数原型:
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;//遍历指针1struct ListNode *cur2=list2;//遍历指针2while(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; }