# [21. Merge Two Sorted Lists](https://leetcode.com/problems/merge-two-sorted-lists/description/) # 思路 合并两个已有序的链表,注意题目给的链表没有头结点,所以为了操作方便可以自己设一个头结点,最后返回头结点的下一个节点即可。两个链表的工作指针就用传进来的l1和 l2即可。 # C++ ``` C++ /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode *res = new ListNode(0); // 自己设一个头结点 ListNode *pre = res; // pre代表已排好序的链表的最后一个节点 while(l1 && l2){ if(l1 -> val <= l2 -> val){ pre -> next = l1; l1 = l1 -> next; } else{ pre -> next = l2; l2 = l2 -> next; } pre = pre -> next; // pre后移 } // 跳出循环时,l1和l2其中一个是NULL if(l1) pre -> next = l1; else pre -> next = l2; // 释放头结点 ListNode *head = res; res = head -> next; head -> next = NULL; delete head; return res; } }; ```