剑指offer(java实现)第16题“合并两个排序的链表 ”-牛客网

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zm13007310400/article/details/81192602

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

时间限制:1秒 空间限制:32768K 热度指数:278635

解答:

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {//最先比较两个链表的头结点,A链表头结点<B链表头结点,则让A的头结点指向B头结点,同时让B头节点与A链表的第二个节点比较。。。。
    //注意边界值:两个链表是否为空,两个链表中的某个链表为空,则合成后的链表就是那个不为空的链表
    public ListNode Merge(ListNode list1,ListNode list2) {
        if (null == list1 && null == list2) {
            return null;
        }
        if (null == list1 && null != list2) {
            return list2;
        }
        if (null != list1 && null == list2) {
            return list1;
        }
        ListNode nextNode = null;
        ListNode head = null;
        if (list2.val >= list1.val) {//确定哪个链表的头结点为合成之后的新链表的头结点
            head = list1;
        } else {
            head = list2;
        }
        while (list1!=null && list2!=null) {//当这两个链表都不为空的时候,循环,直到某个链表为空就结束
            if (list2.val >= list1.val) {//如果链表2的当前节点值大于链表1当前节点值,则链表1当前节点指向链表2那个节点,链表1节点指针向后移
                nextNode = list1.next;
                list1.next = list2;
                list1 = nextNode;
            } else {
                nextNode = list2.next;
                list2.next = list1;
                list2 = nextNode;
            }
        }
        return head;
    }
}

猜你喜欢

转载自blog.csdn.net/zm13007310400/article/details/81192602
今日推荐