建立单列表节点类
package org.article.node;
import lombok.Data;
@Data
public class Node {
private int data;
private Node next;
public Node(int data) {
this.data = data;
}
}
建立单链表类
package org.article.node;
import lombok.Data;
@Data
public class SLinkList {
private Node head;
private int length = 0;
public SLinkList() {
this.head = null;
}
public void addHead(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
} else {
newNode.setNext(head);
head = newNode;
}
length++;
}
public void deleteHead() {
if (head == null) {
System.out.println("链表为空");
return;
}
Node curNode = head;
head = curNode.getNext();
length--;
}
public void addTail(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
} else {
Node preNode = head;
int count = 1;
while (count < length) {
preNode = preNode.getNext();
count++;
}
Node curNode = preNode.getNext();
newNode.setNext(curNode);
preNode.setNext(newNode);
length++;
}
}
public void deleteTail() {
if (head == null) {
System.out.println("链表为空");
return;
}
Node preNode = head;
int count = 1;
while (count < length - 1) {
preNode = preNode.getNext();
count++;
}
Node curNode = preNode;
preNode.setNext(curNode.getNext());
length--;
}
public void insertList(int index, int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
}
if (index < length || index < 0) {
System.out.println("没有指定节点位置");
return;
}
if (index == 1) {
head.setNext(head);
head = newNode;
} else {
Node preNode = head;
int count = 1;
while (count < index - 1) {
preNode = newNode.getNext();
count++;
}
Node curNode = preNode.getNext();
preNode.setNext(newNode);
newNode.setNext(curNode);
}
length++;
}
public void deleteList(int index) {
if (head == null) {
System.out.println("链表为空");
return;
}
if (index == 1) {
Node curNode = head;
head = curNode.getNext();
length--;
return;
} else {
Node preNode = head;
int count = 1;
while (count < index - 1) {
preNode = preNode.getNext();
count++;
}
Node curNode = preNode.getNext();
preNode.setNext(curNode.getNext());
length--;
}
}
public Node getIndexData(int index) {
if (head == null) {
System.out.println("空表");
return null;
}
if (index > length || index < 1) {
System.out.println("节点位置不存在,可查询的位置为1到" + length);
return null;
}
Node preNode = head;
int count = 1;
while (count != index) {
preNode = preNode.getNext();
count++;
}
System.out.println(preNode);
return preNode;
}
public void updateIndexData(int index, int data) {
if (head == null) {
System.out.println("空表");
}
if (index > length || index < 1) {
System.out.println("节点位置不存在,可查询的位置为1到" + length);
}
Node preNode = head;
int count = 1;
while (count != index) {
preNode = preNode.getNext();
count++;
}
preNode.setData(data);
}
}
建立双向列表节点类
package org.article.node;
import lombok.Data;
@Data
public class DNode {
private int data;
private DNode next;
private DNode previous;
public DNode(int data) {
this.data = data;
}
}
建立双向链表类
package org.article.node;
import lombok.Data;
@Data
public class DLinkList {
private DNode head;
private int length = 0;
public DLinkList() {
this.head = null;
}
public void addHead(int data) {
DNode newNode = new DNode(data);
if (head == null) {
head = newNode;
} else {
newNode.setNext(head);
head.setPrevious(newNode);
head = newNode;
}
length++;
}
public void deleteHead() {
if (head == null) {
System.out.println("空表,删除的结点不存在");
} else {
DNode curNode = head;
head = curNode.getNext();
head.setPrevious(null);
}
length--;
}
public void addTail(int data) {
DNode newNode = new DNode(data);
if (head == null) {
head = newNode;
} else {
DNode curNode = head;
int count = 1;
while (count < length) {
curNode = curNode.getNext();
count++;
}
newNode.setNext(null);
newNode.setPrevious(curNode);
curNode.setNext(newNode);
}
length++;
}
public void deleteTail() {
if (head == null) {
System.out.println("空表,删除的结点不存在");
} else {
DNode preNode = head;
int count = 1;
while (count < length - 1) {
preNode = preNode.getNext();
count++;
}
preNode.setNext(null);
}
length--;
}
public void insertList(int data, int index) {
DNode newNode = new DNode(data);
if (head == null) {
head = newNode;
}
if (index > length + 1 || index < 1) {
System.out.println("结点插入的位置不存在,可插入的位置为1到" + (length + 1));
}
if (index == 1) {
newNode.setNext(head);
head.setPrevious(newNode);
head = newNode;
} else {
DNode preNode = head;
int count = 1;
while (count < index - 1) {
preNode = preNode.getNext();
count++;
}
DNode curNode = preNode.getNext();
newNode.setNext(curNode);
newNode.setPrevious(preNode);
preNode.setNext(newNode);
curNode.setPrevious(newNode);
}
length++;
}
public void deleteList(int index) {
if (index > length || index < 1) {
System.out.println("结点删除的位置不存在,可删除的位置为1到" + length);
}
if (index == 1) {
DNode curNode = head;
head = curNode.getNext();
head.setPrevious(null);
length--;
} else {
DNode preNode = head;
int count = 1;
while (count < index - 1) {
preNode = preNode.getNext();
count++;
}
DNode curNode = preNode.getNext();
DNode laterNode = curNode.getNext();
preNode.setNext(laterNode);
if (laterNode != null) {
laterNode.setPrevious(preNode);
}
length--;
}
}
public void getIndexData(int index) {
if (head == null) {
System.out.println("空表");
}
if (index > length || index < 1) {
System.out.println("结点位置不存在,可获取的位置为1到" + length);
}
DNode curNode = head;
int count = 1;
while (count != index) {
curNode = curNode.getNext();
count++;
}
System.out.println(curNode);
System.out.println();
}
public void updateIndexData(int index, int data) {
if (head == null) {
System.out.println("空表");
}
if (index > length || index < 1) {
System.out.println("结点位置不存在,可更新的位置为1到" + length);
}
DNode curNode = head;
int count = 1;
while (count != index) {
curNode = curNode.getNext();
count++;
}
curNode.setData(data);
}
}