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

合并两个排序的链表

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) {
        ListNode* p1 = new ListNode(-1);	// 创建一个头节点,指向pHead1
		p1->next = pHead1;
		ListNode* result = p1;	// 创建一个新节点保存p1,最终返回这个节点的next节点即可
		while(p1->next && pHead2){	// 当两个链表都不为空时,进入循环
			if(p1->next->val > pHead2->val){	// 当头节点的下一个节点大于等于2的节点时
				ListNode* temp1 = p1->next;		// 用temp1保存头节点的下一个节点
				ListNode* temp2 = pHead2->next;	// 用temp2保存2的下一个节点
				p1->next = pHead2;				// 将头结点的下一个节点替换为小的2的节点
				p1->next->next = temp1;			// 将头节点的下一个节点的下一个节点指向大的temp1
				pHead2 = temp2;					// 更新pHead2的节点
				p1 = p1->next;					// 更新p1节点
			}
			else p1 = p1->next;					// 如果头节点的下一个节点等于2的节点更新p1节点即可
		}
		if(pHead2) p1->next = pHead2;			// 循环结束,如果pHead2不为空,则pHead2全是大的,让p1直接指向pHead2
		return result->next;					// 是在pHead1中改的,直接返回pHead1
    }
};

机械转码刷题进行中~ 文章被收录于专栏

这是一个机械专业学生艰难的转码之路,只会用最简单的想法跟思路,请各路大神不吝赐教,在评论区分享你们的想法!!!

全部评论

相关推荐

09-24 18:30
已编辑
长春工业大学 产品经理
小肥罗:HR就是好人的缩写哈哈哈哈
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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