1. 题目描述
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
2. 代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode* p1 = l1;
struct ListNode* p2 = l2;
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode)); //临时头结点
struct ListNode* p = head;
while(p1 && p2) {
if(p1->val <= p2->val) {
p->next = p1;
p1 = p1->next;
}
else {
p->next = p2;
p2 = p2->next;
}
p = p->next;
}
p->next = p1 ? p1 : p2;
return head->next;
}
3. 收获
合并两个没有头结点的单链表,可使用临时头结点来解决第一个结点无法确定的问题。