Java知识点——Java链表的常见操作

Java知识点——Java链表的常见操作

参考:java 链表的常见操作

链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而LinkedList的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。

1、 定义链表的节点类

class Node {  
    protected Node next; // 下一节点  
    protected String data;// 数据  

    public Node(String data) {  
        this.data = data;  
    }  

    // 显示此节点  
    public void show() {  
        System.out.print(data+"、");  
    }  
}  

2、定义链表类及其操作方法

class LinkList {  
    public Node first; // 定义头结点  
    private int pos = 0;// 节点的位置  

    public LinkList() {  
        this.first = null;  
    }  

    // 插入一个头节点  
    public void addFirstNode(String data) {  
        Node node = new Node(data);  
        node.next = first;  
        first = node;  
    }  

    // 删除一个头结点,并返回头结点  
    public Node deleteFirstNode() {  
        Node tempNode = first;  
        first = tempNode.next;  
        return tempNode;  
    }  

    // 在任意位置插入节点 在index的后面插入  
    public void add(int index, String data) {  
        Node node = new Node(data);  
        Node current = first;  
        Node previous = first;  
        while (pos != index) {  
            previous = current;  
            current = current.next;  
            pos++;  
        }  
        node.next = current;  
        previous.next = node;  
        pos = 0;  
    }  

    // 删除任意位置的节点  
    public Node deleteByPos(int index) {  
        Node current = first;  
        Node previous = first;  
        while (pos != index) {  
            pos++;  
            previous = current;  
            current = current.next;  
        }  
        if (current == first) {  
            first = first.next;  
        } else {  
            pos = 0;  
            previous.next = current.next;  
        }  
        return current;  
    }  

    // 根据节点的data删除节点(仅仅删除第一个)  
    public Node deleteByData(String data) {  
        Node current = first;  
        Node previous = first; // 记住上一个节点  
        while (current.data != data) {  
            if (current.next == null) {  
                return null;  
            }  
            previous = current;  
            current = current.next;  
        }  
        if (current == first) {  
            first = first.next;  
        } else {  
            previous.next = current.next;  
        }  
        return current;  
    }  

    // 显示出所有的节点信息  
    public void displayAllNodes() {  
        Node current = first;  
        while (current != null) {  
            current.show();  
            current = current.next;  
        }  
        System.out.println();  
    }  

    // 根据位置查找节点信息  
    public Node findByPos(int index) {  
        Node current = first;  
        if (pos != index) {  
            current = current.next;  
            pos++;  
        }  
        return current;  
    }  

    // 根据数据查找节点信息  
    public Node findByData(String data) {  
        Node current = first;  
        while (current.data != data) {  
            if (current.next == null)  
                return null;  
            current = current.next;  
        }  
        return current;  
    }  
} 

3、例子:

public class Client {  

    public static void main(String[] args) {  
        LinkList linkList = new LinkList();  
        linkList.addFirstNode("A");  
        linkList.addFirstNode("B");  
        linkList.addFirstNode("C");  
        linkList.add(1, "D");   
        linkList.add(2, "E");  
        linkList.add(3, "F");  
        linkList.displayAllNodes();  
        Node node = linkList.deleteByData("A");  
        System.out.println("node : " + node.data);  
        linkList.displayAllNodes();  
        Node node1 = linkList.findByPos(0);  
        System.out.println("node1: " + node1.data);  
        Node node2 = linkList.findByData("E");  
        System.out.println("node2: " + node2.data);  
    }  
} 

4、结果

CDE、F、B、A、  
node : A  
CDE、F、B、  
node: C  
node: E  

猜你喜欢

转载自blog.csdn.net/yangxingpa/article/details/80544184