好久没更新博客了,写一篇有关链表的,同时练习一下java,看到的同志们多多包涵;
首先定义一下node;(可以定义成内部类)
*****不断更新*****
public class Node {
int data;
Node next;
public Node(int data, Node next){
this.data = data;
this.next = next;
}
}
public class LinkList {
private Node first;
private int size;
/*清空*/
public void clear() {
size = 0;
first = null;
}
/*获取某个对象*/
public int get(int index) {
return node(index).data;
}
/*index位置从新赋值*/
public int set(int index, int data) {
Node node = node(index);
int old = node.data;
node.data = data;
return old;
}
/*在一个索引添加元素*/
public void add(int index, int data) {
if (index == 0) {
first = new Node(data, first);
} else {
Node node = node(index-1);
node.next = new Node(data,node.next);
}
size++;
}
/*删除某个位置的元素*/
public void remove(int index) {
Node node = first;
if (index == 0) {
first = first.next;// 头删
} else {
Node prev = node(index - 1);
node = prev.next;
prev.next = node.next;
}
size--;
}
public int indexOf(int data) {
Node node = first;
for (int i = 0; i < size; i++) {
if (data == node.data) return i;
node = node.next;
}
return -1;
}
/*某个索引的node*/
public Node node(int index) {
rangeCheck(index);
Node node = first;
for (int i = 0; i < index; i++) {
node = node.next;
}
return node;
}
void rangeCheck(int index) {
if (index < 0 || index >= size) {
System.out.println("超出范围了");
}
}
public String toString() {
StringBuilder string = new StringBuilder();
string.append("size=").append(size).append(",[");
Node node = first;
for (int i = 0; i < size; i++) {
if (i != 0) {
string.append(",");
}
string.append(node.data);
node = node.next;
}
string.append("]");
return string.toString();
}
/// 闲来无事翻转链表
public Node recursionReverse(Node head) {
if (head.next == null || head == null) return head;
Node newHead = recursionReverse(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
/// 闲来蛋疼翻转链表
public Node recursionForReverse(Node head) {
Node newHead = null;
while (head != null) {
Node temp = head.next;
head.next = newHead;
newHead = head;
head = temp;
}
return newHead;
}
}