Java:当需要创建链表并返回头结点的时候

创建链表,或者改变已有链表的时候,如果我们只声明了一个结点,这个结点需要不断地往链表尾部移动,最后我们无法返回该结点作为头结点。
此时,我们可以用下面这个方法来解决这个问题。(注意看注释部分

可以参考leetcode算法题23. 合并K个排序链表中的分治算法解法,将会遇到这个问题,可以用这个方法来解决。

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

class Solution {
    public ListNode test(){
        ListNode head = new ListNode(0);
        /**
         * 可以看成传head的引用给res,
         * 对res.next进行操作也会改变head.next,
         * 而当我们将res往链表尾部移动时,head并不会随之移动。
         */

        ListNode res = head;

        /**
         * 移动res进行创建链表或者修改已有链表,
         * 始终只对res.next进行操作,(目的:不对head头结点造成影响)
         * 最终只需返回head.next就可以得到链表的头结点,
         * 此时该头结点也是链表的子结点,其数据也有实际意义。
         */
        /**
         * ...
         * ...
         * ...
         * ...一段对res结点进行链表相关操作的代码
         */

        return head.next;
    }
}

你可能感兴趣的:(Java)