题解 | #合并两个排序的链表#

合并两个排序的链表

http://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337

解题思路

本题采用双指针解法。

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
        if(pHead1==nullptr) return pHead2;
        if(pHead2==nullptr) return pHead1;
        if(pHead1->val > pHead2->val){
            int temp = pHead2->val;
            pHead2->val = pHead1->val;
            pHead1->val = temp;
        }
        ListNode* pre = pHead1;
        ListNode* temp1 = pHead1 -> next;
        ListNode* temp2 = pHead2;
        ListNode* ans = pHead1;
        while(1){
            if(temp1==nullptr){
                pre->next = temp2;
                break;
            }
            if(temp2==nullptr) break;
            if(temp1->val >= temp2->val){
                pre->next = temp2;
                temp2 = temp2->next;
                pre->next->next = temp1;
                pre = pre->next;
            }
            else{
                pre = pre->next;
                temp1 = temp1->next;
            }
        }
        return ans;
    }
};

时间复杂度:O(M+N)。其中M, N分别为两链表的长度。

空间复杂度:O(1)。

全部评论

相关推荐

07-02 22:46
门头沟学院 Java
码农索隆:hr:“管你投没投,先挂了再说”
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务