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; + } +}; +```