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

合并两个排序的链表

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==nullptr||pHead2==nullptr)
		{
			return pHead1==nullptr?pHead2:pHead1;
		}
		else 
		{
			ListNode* L1,* L2,* s;
			ListNode* head;
			L1=pHead1;
			L2=pHead2;//双指针


			if(L1->val<L2->val)
			{
				s=L1;
				L1=L1->next;
			}
			else 
			{
				s=L2;
				L2=L2->next;
			}
			head=s;//以小的为起始


			while(L1!=nullptr||L2!=nullptr)//进行连接
			{
				if(L1==nullptr)
				{
					s->next=L2;
					L2=nullptr;
					break;
				}
				else if(L2==nullptr)
				{
					s->next=L1;
					L1=nullptr;
					break;
				}
				else 
				{
					if(L1->val<=L2->val)
					{
						s->next=L1;
						s=s->next;
						L1=L1->next;
					}
					else 
					{
						s->next=L2;
						s=s->next;
						L2=L2->next;
					}
				}

			}


			return head;	
		}
		
    }
};

此代码也适用于不等长链表合并

基本思路是设置游标L1在链表pHead1上移动,设置游标L2在链表pHead2上移动,s在合并链表head(为头)上移动

注意s在移动前必须先连接到除开已在pHead中结点外的最小结点上,当s到nullptr表明head已经连接完毕

如果制定以下规则

1.起始时L1,L2指向各自头结点,

2.当S移动到L1(L2时)L1(L2)向后移动一位,

那么在每次S即将连接下一个结点时,下一个结点必为L1,L2所指结点值较小的一个。

全部评论

相关推荐

感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务