21. 合并两个有序链表(注意:他为两个有序链表!!)
已解答
简单
相关标签
相关企业
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = [] 输出:[]
示例 3:
输入:l1 = [], l2 = [0] 输出:[0]
提示:
两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1
和 l2
均按 非递减顺序 排列
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
? struct ListNode head;
? struct ListNode *tail=&head;//tail结构体指针指向head;
? head.next=NULL;
? while(list1!=NULL&&list2!=NULL)
? {
? ? ? if(list1->val<=list2->val)//谁给了tail,谁就应该向后移一位
? ? ? {
? ? ? ? ? tail->next=list1;
? ? ? ? ? list1=list1->next;
? ? ? }
? ? ? else
? ? ? {
? ? ? ? ? tail->next=list2;
? ? ? ? ? list2=list2->next;
? ? ? }
? ? ? tail=tail->next;//tail此时已存储,应向后移一位
? }
? if(list1!=NULL)//用到了他是两个有序链表,若一个已经比较完,那剩下另一个没比较完就跟在tail后面就行了
? tail->next=list1;
? else
? tail->next=list2;
? return head.next;//因头什么都没放(tail指向head,而是从tail->next开始存数据的),因此是head.next
}
举个例子(字有点丑,凑活着看)