0
点赞
收藏
分享

微信扫一扫

数据结构与算法【LeetCode-Offer】:2.7链表—21. 合并两个有序链表


题目描述

​​题目链接​​ 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

数据结构与算法【LeetCode-Offer】:2.7链表—21. 合并两个有序链表_合并链表

解题思路

简单题,新建一个链表,用来存储合并后的链表。

我们维护一个 ptr3 指针指向新链表的尾节点,我们需要做的是调整它的 next指针。然后,我们重复以下过程,直到 l1 或者 l2 指向了 null :如果 l1 当前节点的值小于等于 l2 ,我们就把 l1 当前的节点接在 ptr3 节点的后面同时将 l1 指针往后移一位。否则,我们对 l2 做同样的操作。不管我们将哪一个元素接在了后面,我们都需要把 ptr3 向后移一位。

在循环终止的时候, l1 和 l2 至多有一个是非空的。由于输入的两个链表都是有序的,所以不管哪个链表是非空的,它包含的所有元素都比前面已经合并链表中的所有元素都要大。这意味着我们只需要简单地将非空链表接在合并链表的后面,并返回合并链表即可。

package com.kami.leetcode.list_study;

import com.kami.leetcode.list_study.listNode.ListNode;

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
public class Solution_21 {

public ListNode mergeTwoLists(ListNode list1, ListNode list2){
if(list1 == null || list2 == null){
return list1 == null ? list2 : list1;
}

// 新链表的头节点
ListNode list3 = new ListNode(0);
// 尾节点
ListNode ptr3 = list3;

while (list1 != null && list2 != null){
if(list1.val <= list2.val){
ptr3.next = list1;
list1 = list1.next;
}else {
ptr3.next = list2;
list2 = list2.next;
}
ptr3 = ptr3.next;
}

// 在循环终止的时候, l1 和 l2 至多有一个是非空的
if(list1 != null){
ptr3.next = list1;
}

if(list2 != null){
ptr3.next = list2;
}

return list3.next;
}
}


举报

相关推荐

0 条评论