package com.muluo.test1003;
public class MyLinkedList {
public static void main(String[] args) {
MyLinkedList myLinkedList = new MyLinkedList();
myLinkedList.addLast(1);
myLinkedList.addLast(5);
myLinkedList.addLast(2);
myLinkedList.addLast(8);
myLinkedList.addLast(6);
System.out.println(myLinkedList);
// myLinkedList.searchPrevNode(8);
// myLinkedList.delete(2);
myLinkedList.add(0, 5);
System.out.println(myLinkedList);
myLinkedList.searchPrevNode(8);
}
Node first;
Node last;
int size = 0;
public void add(int index, int ele) {
if (index == size) {
addLast(index);
} else {
Node cur = get(index);
Node before = cur.prev;
Node newNode = new Node(before, ele, cur);
cur.prev = newNode;
if (before == null) {
first = newNode;
} else {
before.next = newNode;
}
size++;
// System.out.println(cur.val);
}
}
// 链表的二分查找
public Node get(int index) {
if (index < size / 2) {
Node x = first;
for (int i = 0; i < index; i++) {
x = x.next;
}
return x;
} else {
Node x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
private void delete(int index) {
// 获取要删除的结点
// Node cur = first;
// for (int i = 0; i < index; i++) {
// cur = cur.next;
// }
Node cur = get(index);
// System.out.println(cur.val);
// 保存该节点的下一个结点
Node next = cur.next;
// 保存该结点的上一个结点
Node prev = cur.prev;
// 判断是删除的头结点,尾结点,还是中间结点
if (prev == null) {
first = next;
} else {
prev.next = next;
cur.prev = null;
}
// 判断当前结点的下一个和上一个指针哪个为空,则分别进行处理
// 如果是头节点,first = next
if (next == null) {
last = prev;
} else {
next.prev = prev;
cur.next = null;
}
size--;
// 不是头结点,prev.next = next; 删除结点的下一个prev = null
// 如果是尾结点为空。last = prev;
// next.prev = prev 删除结点的next = null
}
public void addLast(int i) {
Node l = last;
Node newNode = new Node(l, i, null);
last = newNode;
if (l == null) {
first = newNode;
} else {
l.next = newNode;
}
size++;
}
public void searchPrevNode(int i) {
Node cur = first;
while (cur != null) {
if (cur.val == i) {
System.out.println(cur.prev.val);
}
cur = cur.next;
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
Node cur = first;
while (cur != null) {
sb.append(cur.val + " ");
cur = cur.next;
}
return sb.toString();
}
}
双向链表的实现(LinkedList)
最新推荐文章于 2022-12-20 20:51:09 发布