链表类算法

    技术2026-01-07  11

    单向链表

    c++

    在这里插入代码片

    Java

    package 数据结构与算法; import java.util.*; public class 链表 { public static void main(String[] args) { /* LinkedList<String> myList = new LinkedList<String>(); myList.add("1"); myList.add("2"); myList.add("3"); myList.add("4"); myList.add("5"); System.out.println("链表的最后一个元素是:" + myList.getFirst()); System.out.println("链表最后一个元素是:" + myList.getLast()); // 首尾插入 myList.addFirst("X"); myList.addLast("Y"); // remove 方法 // 生成子列表 myList.subList(1, 4); // 删除指定范围内元素 // [1, 4) myList.subList(1, 4).clear(); // 迭代器遍历 Iterator<String> it = myList.iterator(); while(it.hasNext()) { System.out.println(it.next()); }*/ Node n1 = new Node(1); Node n2 = new Node(2); Node n3 = new Node(3); n1.append(n2).append(n3).append(new Node(4)); n1.show(); Node n5 = new Node(5); n1.after(n5); n1.show(); } } class Node { // 节点内容 int data; // 下一个节点 Node next; // 构造 public Node(int data) { this.data = data; } // 为节点追回节点 public Node append(Node node) { // 当前节点 Node currentNode = this; // 向后找 while (true) { // 取出下一个节点 Node nextNode = currentNode.next; // 如果下一个节点为null,当前节点已经是最后一个节点 if (nextNode == null) break; // 赋给当前节点 currentNode = nextNode; } // 把需要追回的节点追加为当前节点的下一个节点 currentNode.next = node; return this; } public void show() { Node currentNode = this; while(true) { System.out.println(currentNode.data + " "); // 取出下一个节点 currentNode = currentNode.next; if (currentNode == null) break; } } // 删除下一个节点 public void removeNext() { // 取出下一个节点 Node newNext = next.next; // 把下下一个节点设置为当前节点的下一个节点 this.next = newNext; } // 插入一个节点 public void after(Node node) { Node nextNext = next; // 把新节点作为当前节点的下一个节点 this.next = node; node.next = nextNext; } //获取下一个节点 public Node next() { return this.next; } // 获取节点中的数据 public int getData() { return this.data; } // 当前节点是否时最后一个节点 public boolean isLast() { return next == null; } }

    双向链表:

    c++

    Java

    package 数据结构与算法; public class 链表_双向 { public static void main(String[] args) { DoubleNode n1 = new DoubleNode(1); DoubleNode n2 = new DoubleNode(2); DoubleNode n3 = new DoubleNode(3); n1.after(n2); n2.after(n3); System.out.println(n2.pre().getData()); System.out.println(n2.getData()); System.out.println(n2.next().getData()); n1.show(); } } class DoubleNode { // 节点内容 private int data; // 下一个节点 private DoubleNode next = this; // 上一个节点 private DoubleNode pre = this; public DoubleNode() { } // 构造 public DoubleNode(int data) { this.data = data; } // 展示 public void show() { DoubleNode currentNode = this; while (true) { System.out.println(currentNode.data + " "); // 取出下一个节点 currentNode = currentNode.next; if (currentNode == null) { break; } } } // 插入一个节点 public void after(DoubleNode node) { // 当前节点下一个节点 DoubleNode nextNext = next; // 把新节点作为当前节点的下一个节点 this.next = node; node.pre = this; node.next = nextNext; nextNext.pre = node; } // 获取下一个节点 public DoubleNode next() { return this.next; } // 获取前一个节点 public DoubleNode pre() { return this.pre; } // 获取节点中的数据 public int getData() { return this.data; } }
    Processed: 0.036, SQL: 9