leetcode-JZ25
Posted Alan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-JZ25相关的知识,希望对你有一定的参考价值。
题面
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
原题链接
分析
设置两个节点big和small,big节点的值永远大于等于small节点的值
源代码(注释部分即为思路)
/**
* 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==NULL){
return l2;
}
if(l2==NULL){
return l1;
}
ListNode* big = l2;
ListNode* small = l1;
ListNode* ret = l1;
//big节点的值永远大于等于small节点的值
if(l1->val <= l2->val){
big = l2;
small = l1;
ret = l1;
}
else{
big = l1;
small = l2;
ret = l2;
}
//让small遍历结束即可
while(small!=NULL){
ListNode* pre;
//while循环里有2个条件,2个条件的先后顺序很重要,需要把small!=NULL放在前面
while(small!=NULL && (small -> val) <= (big -> val)){
//pre是small的前序节点
pre = small;
small = small->next;
}
pre->next = big;
//维护small和big节点
if(small!=NULL){
if(small->val > big->val){
ListNode* tmp = small;
small = big;
big = tmp;
}
}
}
return ret;
}
};
以上是关于leetcode-JZ25的主要内容,如果未能解决你的问题,请参考以下文章