剑指Offer

剑指Offer——合并两个排序的链表

2019-05-24  本文已影响0人  KEEPINUP

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
时间限制:1秒 空间限制:32768K
本题知识点:链表

代码实现

/*
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){
            return list2;
        }
        if(list2 == null){
            return list1;
        }
        ListNode result = null;
        ListNode current = null;
        while(list1!=null && list2!=null){
            if(list1.val <= list2.val){
                if(result == null){
                    result = list1;
                    current = result;
                }else{
                    current.next = list1;
                    current = list1;
                }
                list1 = list1.next;
            }else{
                if(result == null){
                    result = list2;
                    current = result;
                }else{
                    current.next = list2;
                    current = list2;
                }
                list2 = list2.next;
            }
        }
        if(list1 == null){
            current.next = list2;
        }else{
            current.next = list1;
        }
        return result;
    }
}

解题思路

这道题还是考察的我们对链表知识的掌握,还没掌握的同学请看我前面几道题,或者去数据结构和算法系列的链表的文章。
首先,我们进行是否为空的判断,如果为空我们就直接返回另一个链表即可。
然后我们定义合并后的链表的头结点 result 和当前结点 current。当我们进行合并选取下一个结点的时候分为两种情况。第一种是链表1当前结点和链表2当前结点都不为空,然后我们选择相对较小的那个加入合并后的链表,然后把被选择的链表当前结点更新为下一个结点,然后依次循环判断;第二种情况是其中一个链表当前结点为空了,那么我们直接把另外一个链表剩余的结点合并到结果链表即可。
代码中 result 空判断,是因为 result 和 current 结点还都为空,所以直接把选择的结点赋值给 result 和 current,如果不为空,那么就把 current 的指针指向被选择结点。

上一篇下一篇

猜你喜欢

热点阅读