合并两个有序链表---简单
Posted manch1n想玩LOL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并两个有序链表---简单相关的知识,希望对你有一定的参考价值。
题目:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
思路:
感冒加上鼻炎,又有点头晕,30分钟才做完。这道简单题其实就是分类讨论,还要注意保留头节点的指针保留可以返回。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if(l1==nullptr) return l2; if(l2==nullptr) return l1; auto p=l1,q=l2; ListNode* head=l1; if(p->val>q->val) { auto t=p; p=q; q=t; head=l2; } ListNode* p_prev=nullptr; while(q){ while(p!=nullptr&&(p->val<q->val)) { p_prev=p; p=p->next; } if(p_prev) { p_prev->next=q; auto q_next=q->next; q->next=p; p_prev=p_prev->next; q=q_next; } else { p_prev=q; auto q_next=q->next; q->next=p; q=q_next; head=p_prev; } } return head; } };
以上是关于合并两个有序链表---简单的主要内容,如果未能解决你的问题,请参考以下文章