剑指Offer(十六)合并两个排序的链表(Java版 )

一、题目描述

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

二、代码分析

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) { 
        //首先确保不能为空
        if(list1==null&&list2==null)
            return null;
        if(list1==null&&list2!=null)
            return list2;
        if(list1!=null&&list2==null)
            return list1;
        ListNode head = null;   //定义一个head节点,用来存放所有数据
        //如果list1的头结点的值小于list2的头结点的值
        if(list1.val<list2.val){
            head = list1;       //把list1节点赋值给head节点
            list1 = list1.next; //取出list1的下一个结点
        }
        else{
            head = list2;       //否则吧list2结点赋值给head结点
            list2 = list2.next; //取出list2的下一个结点
        }
        ListNode cur = head;   //当前节点为head
        cur.next=null;    
        //只要list1或者list2中有一个为null了就跳出循环  
        while(list1!=null&&list2!=null){
            if(list1.val<list2.val){
                cur.next = list1;
                list1 = list1.next;
            }
            else{
                cur.next = list2;
                list2 = list2.next;
            }
            cur = cur.next;
            cur.next = null;
        }
        //继续将剩下的元素添加进来
        if(list1==null&&list2!=null){
            cur.next =list2;
        }else if(list2==null&&list1!=null){
            cur.next = list1;
        }
        return head;
    }
}

运行结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41835916/article/details/80681297
今日推荐