Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
此题为两个链表的合并,合并后的表头节点不一定,故应联想到使用dummy节点。链表节点的插入主要涉及节点next
指针值的改变,两个链表的合并操作则涉及到两个节点的next
值变化,若每次合并一个节点都要改变两个节点next
的值且要对NULL
指针做异常处理,势必会异常麻烦。嗯,第一次做这个题时我就是这么想的… 下面看看相对较好的思路。
首先dummy
节点还是必须要用到,除了dummy
节点外还引入一个lastNode
节点充当下一次合并时的头节点。在l1
或者l2
的某一个节点为空指针NULL
时,退出while
循环,并将非空链表的头部链接到lastNode->next
中。
/** * 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* dummy = new ListNode(0); ListNode* cur = dummy; while (l1 != nullptr && l2 != nullptr) { if (l1->val < l2->val) { cur->next = l1; l1 = l1->next; } else { cur->next = l2; l2 = l2->next; } cur = cur->next; } cur->next = (l1 != nullptr) ? l1 : l2; return dummy->next; } }; // 12 ms
[LeetCode] Merge Two Sorted Lists
原文:http://www.cnblogs.com/immjc/p/7414036.html