链表oj----->合并k个有序链表

Posted ohana!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表oj----->合并k个有序链表相关的知识,希望对你有一定的参考价值。

题目内容:

解题思路:

  • 合并k个有序链表的本质是首先可以合并两个有序有序链表
  • 如何合并两个有序链表:
  1. 新创建一个链表(为什么不能在原有的链表上进行更改,首先,链表长度不满足,其次,当更改一个其中的一个指向时,往后的结点已经丢失)
  2. 新创建的链表的指向只根据我们的要求去进行改变的
  3. 用这个方法合并时,必然会有一个链表至少有一个结点没有指向,所以,在循环结束后,需要对还没有指向空的链表继续进行连接
  4. 返回我们定义的链表就是合并后的新链表
  • 此时,合并k个升序链表就简单多了,我们只需用考虑,怎么才能让其连续合并,那就是利用循环,不断的更新我们定义的链表,就可以了

解题代码:

class Solution {
    //编写合并升序链表的方法
    public ListNode mergeTwoLists(ListNode l1,ListNode l2){
        //对两个头结点进行判断
        if(l1 == null){
            return l2;
        }
        if(l2 == null){
            return l1;
        }

        ListNode newNode = new ListNode(0);
        ListNode node = newNode;

        ListNode cur1 = l1;
        ListNode cur2 = l2;

        while(cur1 != null && cur2 != null){
            if(cur1.val < cur2.val){
                node.next = cur1;
                cur1 = cur1.next;
            }else{
                node.next = cur2;
                cur2 = cur2.next;
            }
            
            node = node.next;
        }

        if(cur1 == null){
            node.next = cur2;
        }
        if(cur2 == null){
            node.next = cur1;
        }

        return newNode.next;
    }
    public ListNode mergeKLists(ListNode[] lists) {
        if(lists == null){
            return null;
        }

        ListNode node = null;
        for(int i = 0;i < lists.length;i++){
            node = mergeTwoLists(node,lists[i]);
        }
        return node;
    }
}

以上是关于链表oj----->合并k个有序链表的主要内容,如果未能解决你的问题,请参考以下文章

数据结构学习笔记(数组链表OJ题)整理与总结

[ 链表OJ题--C语言 ] 合并两个有序链表

链表oj----合并两个有序链表

数据结构之超硬核热门复杂度数组链表OJ题2W+文字+图片详解

OJ练习第60题——合并 K 个升序链表

数据结构---线性表(链表OJ)