合并两个有序链表

题目

将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的。

分析

创建一个新的链表,依次从两个链表中取出当前节点进行比较,小的放到新链表上。最后如果其中一个链表还有剩余,直接放到新链表的末尾。注意不要忘了判断链表为空的状态。

代码实现

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param l1 ListNode类 
     * @param l2 ListNode类 
     * @return ListNode类
     */
    public ListNode mergeTwoLists (ListNode l1, ListNode l2) {
       //其中有一个链表为空,返回另一个不会空的链表,如果都为空返回null
        if(l1==null){
           return l2;
       }
        if(l2==null){
            return l1;
        }
        //创建头结点
        ListNode head = new ListNode(0);
        //最后返回的节点是头结点的next
         ListNode resultNode = head;
        // 开始遍历两个链表,一次比较两个链表节点的大小,小的放在head节点的next
        while(l1!=null&&l2!=null){
            if(l1.val>l2.val){
                head.next = l2;
                l2 = l2.next;
            }else{
                head.next = l1;
                l1 = l1.next;
            }
            head= head.next;
        }
        //最后如果有一个链表还有剩余,直接把剩下的节点放到head尾部
        head.next = (l1 == null)?l2:l1;
        //返回当时定义的节点的next
        return resultNode.next;
    }
}

本题链接,传送门
思路比较简单,但还是要注重细节,在比较之前需要记录一下初始状态,最终返回的是初始结点的next节点。

在这里插入图片描述

有时候不是看到了希望再去坚持,而是坚持下去才能看到希望!

©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页