自定义链表

mac2025-12-04  7

自定义节点

大多数人使用链表都是看了一遍懵懵懂懂的,想要真正学习的人建议潜下心来自定义一个链表试试,自己搭建高楼大厦和看别人搭建是两码事,在自定义的过程中会明白自己创建的美妙感觉

代码参考

public class Node { Node privious; Node next; Object element; public Node(){} public Node(Node privious, Node next, Object element) { super(); this.privious = privious; this.next = next; this.element = element; } public Node(Object element) { super(); this.element = element; } }

使用自定义的节点创建链表方法

public class LinkedList01 <E>{ private Node first; private Node last; private int size; // 向链表中加入元素 public void add(E element) { Node node = new Node(element); if (first == null) { first = node; last = node; } else { node.next = null; node.privious = last; last.next = node; last = node; } size++; } // 通过索引获取列表的元素 public Object get(int index) { if (index > size - 1) { throw new RuntimeException("数组索引不合法" + index); } Node tem = null; if (index <= (size >> 1)) { tem = first; for (int i = 0; i < index; i++) { tem = tem.next; } } else { tem = last; for (int j = size - 1; j > index; j--) { tem = tem.privious; } } return tem.element; } // 通过内容删除链表中的元素 public void remove(int index) { Node tem = null; if (index <= (size >> 1)) { tem = first; for (int i = 0; i < index; i++) { tem = tem.next; } if (tem.next != null) { tem.next.privious = tem.privious; } if (tem.privious != null) { tem.privious.next = tem.next; } } else { tem = last; for (int j = size - 1; j > index; j--) { tem = tem.privious; } if (tem.next != null) { tem.next.privious = tem.privious; } if (tem.privious != null) { tem.privious.next = tem.next; } } } //重写toString()方法 @Override public String toString() { Node tem = first; StringBuilder sb = new StringBuilder(); sb.append("["); while (tem != null) { sb.append(tem.element + ","); tem = tem.next; } sb.setCharAt(sb.length() - 1, ']'); return sb.toString(); } }
最新回复(0)