萌新们,学到链表时候会不会困惑呢?
我那时是感觉比较难的了(我比较菜呜呜呜),学链表学了很久才弄清楚怎么个操作法。
现在我来分享这个基础的链表的操作噢,基本很多时候都要用到,所以一定要好好理解呀~~
链表基础 快快学起来!!!
上代码:
import java.util.Objects;
/ *1.顺序添加节点
*2.逆序添加节点
*3.先序遍历链表
*4.后续遍历链表
*5.跳跃遍历链表
*/
public class LastWeek<E> {
private class Node {
public E e;
public Node pre;
public Node next;
public Node(E e, Node pre, Node next) {
this.e = e;
this.pre = pre;
this.next = next;
}
public Node() {
this(null, null, null);
}
public Node(E e) {
this(e, null, null);
}
@Override
public String toString() {
return e.toString();
}
}
private int size;
public Node head, tail;
/**
* 在链表尾部添加元素
*/
public void addLast(E e) {
Node newNode = new Node(e);
if (head == null) {
head = newNode;
} else {
Node curNode = head;
int count = 1;
while (count < size) {
curNode = curNode.next;
count++;
}
newNode.next = null;
newNode.pre = curNode;
curNode.next = newNode;
}
size++;
}
/**
* 在链表头部添元素
*/
public void addFirst(E e) {
Node newNode = new Node(e);
if (head != null) {
newNode.next = head;
head.pre = newNode;
}
head = newNode;
size++;
}
public static void main(String[] args) {
LastWeek<Integer> list = new LastWeek<>();
//在链表头部添元素
list.addFirst(1);
list.addFirst(2);
list.addFirst(3);
//在链表头部添元素
list.addLast(4);
list.addLast(5);
System.out.println("正序遍历");
LastWeek<Integer>.Node node = list.head;
while (node != null) {
System.out.println(node);
node = node.next;
}
System.out.println("反序遍历");
LastWeek<Integer>.Node node1 = list.head;
while (node1.next != null) {
node1 = node1.next;
}
while (node1 != null) {
System.out.println(node1);
node1 = node1.pre;
}
System.out.println("跳跃遍历");
LastWeek<Integer>.Node node2 = list.head;
while (!Objects.isNull(node2)) {
System.out.println(node2);
node2 = node2.next;
if (!Objects.isNull(node2)){
node2 = node2.next;
}
}
}
}