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

合并两个排序的链表

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

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
        if(pHead1 == NULL && pHead2 == NULL) return {};
        if(pHead1 == NULL) return pHead2;
        if(pHead2 == NULL) return pHead1;  //以上特殊情况判断
        int min;   //min找到两个链表的第一个谁小
        if(pHead1->val < pHead2->val){
            min = pHead1->val;
            pHead1 = pHead1->next;   //指针要指向下一个
        }
        else{
            min = pHead2->val;
            pHead2 = pHead2->next;
        }
        ListNode* res = new ListNode(min);  //利用min创建一个返回的链表
        ListNode* rec = res;   //头节点记录,方便返回
        while(1){
            if(pHead1 == NULL && pHead2 == NULL) break;  //退出循环
            if(pHead1 == NULL){
                res->next = pHead2;    //一个表走完了,直接指向另一个表退出
                break;
            }
            if(pHead2 == NULL){
                res->next = pHead1;
                break;
            }
            if(pHead1->val < pHead2->val){
                res->next = pHead1;    //找出小的那个,指向该节点
                res = res->next;      //res更新
                pHead1 = pHead1->next;   //这个节点的指针去下一个
                res->next = NULL;     //把这个节点从原链表摘出来
            }
            else{
                res->next = pHead2;
                res = res->next;
                pHead2 = pHead2->next;
                res->next = NULL;    //把这个节点从原链表摘出来
            }
        }
        return rec;
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
02-28 17:01
门头沟学院 C++
俊朗的铁猫希望被捞:兄弟如果只想搞钱的话,你这个简历最适合的其实是辅导机构做dai写啥的真的特别赚
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务