Java实现链表的常见操作算法(3)

// 删除指定结点
    private boolean delNode(Node node) {
        if (node.getNext() == null) {
            return false;// 在不知道头结点的情况下,没法删除单链表的尾结点
        }
        node.setData(node.getNext().getData());
        node.setNext(node.getNext().getNext());
        return true;

}

// 判断两个链表是否相交:相交的链表的尾结点相同
    private boolean isCross(Node n1, Node n2) {
        while (n1.getNext() != null) {
            n1 = n1.getNext();
        }
        while (n2.getNext() != null) {
            n2 = n2.getNext();
        }
        if (n1.getData() == n2.getData()) {
            return true;
        }
        return false;
    }

// 求相交链表的起始点
    private Node getFirstCrossNode(LinkedListOperator l1, LinkedListOperator l2) {
        int len = l1.getLength() - l2.getLength();
        Node n1 = l1.head;
        Node n2 = l2.head;
        if (len > 0) {
            for (int i = 0; i < len; i++) {
                n1 = n1.getNext();
            }
        } else {
            for (int i = 0; i < len; i++) {
                n2 = n2.getNext();
            }
        }
        while (n1.getData() != n2.getData()) {
            n1 = n1.getNext();
            n2 = n2.getNext();
        }
        return n1;
    }

public static void main(String[] args) {
        LinkedListOperator llo = new LinkedListOperator();
        llo.addNode(10);
        llo.addNode(4);
        llo.addNode(6);
        llo.addNode(8);
        llo.printLink();
        // llo.delNode(4);
        // llo.sortList();
        // llo.distinctLink();
        // System.out.println(llo.getReverNode(3).getData());
        // llo.reserveLink();
        // System.out.println(llo.getMiddleNode().getData());
        // System.out.println(llo.isRinged());
        llo.delNode(llo.head.getNext().getNext());
        llo.printLink();
    }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/56724984e28c646d7941e53d6b4f4c61.html