算法 03 链表的基本算法

本贴最后更新于 785 天前,其中的信息可能已经东海扬尘

1.单向链表

public class Node {
    public int value;
    public Node next;
    public Node(int data) {
        value = data;
    }
}

2.双向链表

public class DoubleNode {
    public int value;
    public DoubleNode pre;
    public DoubleNode next;

    public DoubleNode(int data) {
        value = data;
    }
}

3.链表反转

3.1 单链表反转

    /**
     * 单链表反转
     */
    public static Node reverse(Node node) {
        //省略node校验
        Node temp = null;
        Node pre = null;
        while (node != null) {
            //temp -> 下一个节点
            temp = node.next;
            //当前节点的next -> 上一个节点
            node.next = pre;
            //上个节点切换为node
            pre = node;
            //node切换成temp
            node = temp;
        }
        return node;
    }

3.2 双链表反转

    /**
     * 双向链表反转
     * */
    public static DoubleNode reverse(DoubleNode node) {
        //省略node校验
        DoubleNode temp = null;
        DoubleNode pre = null;
        while (node != null) {
            //temp -> 下一个节点
            temp = node.next;
            //当前节点的next -> 上一个节点
            node.next = pre;
            //比单链表多了这异步,当前节点的pre  -> 下个节点即temp
            node.pre = temp;
            //上个节点切换为node
            pre = node;
            //node切换成temp
            node = temp;
        }
        return node;
    }

4.删除节点

    /**
     * 删除所有值为val的节点
     * 注意: 有可能删除头节点,所以需要返回链表头
     */
    public static Node removeNode(Node node, Integer val) {
        Node head = node;
        //如果链表前几个值都需要删除,则需找到新链表头
        while (head != null) {
            if (head.value != val) {
                break;
            }
            head = head.next;

        }

        //  a  -> b -> c -> d
        Node pre = head;
        Node cur = head;
        while (cur != null) {
            if (cur.value == val) {
                pre.next = cur.next;
            } else {
                pre = cur;
            }
            cur = cur.next;
        }
        return head;

    }

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...