题目
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
链接:21. 合并两个有序链表 - 力扣(LeetCode)
题解
设置两个指针head和tail,head用来指向新链表的头结点,tail用来进行新链表的尾插。比较两个链表,取较小的结点进行尾插。
注意,当有一个链表为空时,直接返回另一个非空链表;当有一个链表先为空时,tail直接指向非空链表,合并结束,返回head。
代码如下:
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) { struct ListNode* head = NULL; struct ListNode* tail = NULL; if (list1 == NULL) return list2; if (list2 == NULL) return list1; while (list1 && list2) { if (list1->val <= list2->val) { if (tail == NULL) head = tail = list1; else { tail->next = list1; tail = tail->next; } list1 = list1->next; } else { if (tail == NULL) head = tail = list2; else { tail->next = list2; tail = tail->next; } list2 = list2->next; } } if (list1) tail->next = list1; if (list2) tail->next = list2; return head; }