Merge Two Sorted Lists
这貌似也一个常见的面试题.合并两个有序链表.尽量的占用空间少。
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.
- 解法: 用一个指针在两个链表上移动,一直next下去连成一串,就是答案.为了方便,使用上一篇的那种方法,建一个超级头结点,从这个头结点开始移动写起来会比较方便.不用判断第一个节点是在l1还是l2。
Code:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
void moveToList(ListNode* &pkMove, ListNode* &pkTgtList) {
if (!pkTgtList) return;
pkMove->next = pkTgtList;
pkTgtList = pkTgtList->next;
pkMove = pkMove->next;
}
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* pkResult = new ListNode(0);
ListNode* pkMove = pkResult;
for (; l1 && l2; moveToList(pkMove, l1->val < l2->val ? l1 : l2));
moveToList(pkMove, l1);
moveToList(pkMove, l2);
return pkResult->next;
}
};
欢迎访问我的github,leetcode持续更新: https://github.com/tsfissure/LeetCode