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

合并两个排序的链表

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)
		{
			return pHead2;
		}

		if(pHead2 == nullptr)
		{
			return pHead1;
		}

		ListNode* head = new ListNode(pHead1->val);
		ListNode* pnow = head;

		while(pHead1 && pHead2)
		{   // pnow->[pHead1->val]<-head  //假如
			// pHead1->[1]->[3]->[5]
			// pHead2->[2]->[4]->[6]->[8]
			

            //如果1小于等于2 将pnow指向1 1指向下一个位置再于2比较一下
			if(pHead1->val <= pHead2->val )
			{
				pnow->next = pHead1;
			// pnow->[pHead1->val]<-head  //假如
			//          |
			//          v
			// pHead1->[1]->[3]->[5]
			// pHead2->[2]->[4]->[6]->[8]
				pHead1 = pHead1->next;
            // pnow->[pHead1->val]<-head //假如
			//          |
			//          v
			//         [1]->[3]->[5]
			//			     ^
			//               |
			//             pHead1
			// pHead2->[2]->[4]->[6]->[8]
			}
			//如果2小于1 将pnow指向2位置 2指向下一个位置再与1比较一下
			else
			{
				pnow->next = pHead2;
		    //	[pHead1->val]<-head  //假如
			//         |
			//         v
			//        [1]->[3]->[5]
			//		   |    ^
			//         |    | 
			//         v    pHead1
		    //pHead2->[2]->[4]->[6]->[8]
			//          	
				pHead2 = pHead2->next;
			//		[pHead1->val]<-head  //假如
			//          |
			//          v
			//         [1]->[3]->[5]
			//		 pnow    ^
			//        |      |
			//        v    pHead1
		    //        [2]->[4]->[6]->[8]
			//              ^
			//			    |
			//			  pHead2
			}
			//pnow指向下一个位置
			pnow = pnow->next;
		    //		[pHead1->val]<-head  //假如
			//          |
			//          v
			//  pnow-> [1]->[3]->[5]
			//			     ^
			//               |
			//             pHead1
			// pHead2->[2]->[4]->[6]->[8]			

		}
		//当存在有不空链表表示较大,直接连上
         if(pHead1)
		 {
			pnow->next = pHead1;
		 }
		 else 
		 {
		    pnow->next = pHead2;
		 }

		 //刚开始有一个初始化的节点,记得去了
         return head->next;

    }
};

全部评论

相关推荐

到我怀里来:教育背景不用写主修课程,还有你写班级排名是什么意思?咋不写寝室排名呢😂要写就写年纪排名。得了那么多奖结果项目经历什么技术细节都不写清楚,把技术细节写清楚,用了什么技术解决了什么问题,“用了python语言、用了SQL语言”,有这样写的?hr一看就知道你是包装的或者比赛的奖是混的,你什么技术细节都不懂。校内职务全删了,什么三好学生、文明寝室这些你写上去干嘛?重复的奖学金你写三次干嘛?自我评价写那么多干嘛?谁想看这些
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务