From b4c62b12739f98544ad8cbbcc650d3cb0bb93548 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= <14021051@buaa.edu.cn>
Date: Wed, 19 Sep 2018 18:46:03 +0800
Subject: [PATCH] Create 21. Merge Two Sorted Lists.md

---
 21. Merge Two Sorted Lists.md | 44 +++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 21. Merge Two Sorted Lists.md

diff --git a/21. Merge Two Sorted Lists.md b/21. Merge Two Sorted Lists.md
new file mode 100644
index 0000000..3c90b43
--- /dev/null
+++ b/21. Merge Two Sorted Lists.md	
@@ -0,0 +1,44 @@
+# [21. Merge Two Sorted Lists](https://leetcode.com/problems/merge-two-sorted-lists/description/)
+# 思路
+合并两个已有序的链表,注意题目给的链表没有头结点,所以为了操作方便可以自己设一个头结点,最后返回头结点的下一个节点即可。两个链表的工作指针就用传进来的l1和
+l2即可。
+# 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;
+    }
+};
+```