内部
class LinkedNode {
public int data;
public LinkedNode next = null;
}
public class LinkedList {
private LinkedNode head = null;
public void addFirst ( int data) {
//头插法
LinkedNode node = new LinkedNode();
node.data = data;
if (head == null){
head = node;
return;
} else {
node.next = head;
head = node;
}
}
public void addLast (int data) {
//尾插
LinkedNode node = new LinkedNode();
node.data = data;
if (head == null) {
head = node;
return;
}
LinkedNode cur = head;
while (cur.next != null) {
cur = cur.next;
}
cur.next = node;
}
public void addIndex (int index, int data) {
//在index处插入
if ( index < 0 || index > size()) {
return;
}
if (index == 0) {
addFirst(data);
return;
}
if ( index == size()) {
addLast(data);
return;
}
LinkedNode node = new LinkedNode();
node.data = data;
//找到index位置节点的前一个节点pre
LinkedNode pre = getIndexPos (index - 1);
node.next = pre.next;
pre.next = node;
}
public LinkedNode getIndexPos (int index) {
LinkedNode cur = head;
for (int i = 0; i < index; i++){
cur = cur.next;
}
return cur;
}
public boolean contains (int key) {
for (LinkedNode cur = head; cur != null; cur = cur.next){
if (cur.data == key){
return true;
}
}
return false;
}
public int size () {
int size = 0;
for (LinkedNode node = head; node != null; node = node.next){
size++;
}
return size;
}
public void remove (int toRemove) {
//处理空链表
if (head == null){
return;
}
//判断是不是为头节点
if (head.data == toRemove) {
head = head.next;
return;
}
//中间节点,找到前一个节点pre
LinkedNode pre = getPrePos (toRemove);
if (pre != null){
pre.next = pre.next.next;
} else {
System.out.println("删除失败,无此数据");
return;
}
}
public void removeAll (int toRemove) {
if (head == null){
return;
}
while (getPrePos(toRemove) != null) {
remove(toRemove);
}
}
private LinkedNode getPrePos (int toRemove) {
for (LinkedNode node = head; node.next != null; node = node.next) {
if ( toRemove == node.next.data) {
return node;
}
}
return null;
}
public void display () {
//打印链表
System.out.print("[");
for ( LinkedNode node = head; node != null; node = node.next) {
System.out.print(node.data);
if (node.next != null) {
System.out.print("," + " ");
}
}
System.out.println("]");
}
public void clear () {
head = null;
}
}
主函数及部分测试.
public class TestLinkedList {
public static void main(String[] args) {
//testAddFirst();
//testAddLast();
//testAddIndex();
//testRemove();
//testContains();
//testRemoveAll();
testClear();
}
public static void testAddFirst () {
LinkedList list = new LinkedList();
list.addFirst(1);
list.addFirst(2);
list.addFirst(3);
list.addFirst(4);
list.display();
}
public static void testAddLast () {
LinkedList list = new LinkedList();
list.addLast(1);
list.addLast(2);
list.addLast(3);
list.addLast(4);
list.display();
System.out.println(list.size());
}
public static void testAddIndex () {
LinkedList list = new LinkedList();
list.addLast(1);
list.addLast(2);
list.addLast(3);
list.addLast(4);
list.getIndexPos(1);
list.display();
list.addIndex(2,5);
list.display();
}
public static void testRemove () {
LinkedList list = new LinkedList();
list.addLast(1);
list.addLast(2);
list.addLast(3);
list.addLast(4);
list.display();
list.remove(0);
list.display();
}
public static void testContains () {
LinkedList list = new LinkedList();
list.addFirst(1);
list.addFirst(2);
list.addFirst(3);
list.addFirst(4);
System.out.println(list.contains(0));
list.display();
}
public static void testRemoveAll () {
LinkedList list = new LinkedList();
list.addFirst(4);
list.addFirst(1);
list.addFirst(2);
list.addFirst(3);
list.addFirst(4);
list.addFirst(4);
list.addFirst(4);
list.addFirst(4);
list.display();
list.removeAll(4);
list.display();
}
public static void testClear () {
LinkedList list = new LinkedList();
list.addFirst(1);
list.addFirst(2);
list.addFirst(3);
list.addFirst(4);
list.display();
list.clear();
list.display();
}
}
萌新写java
有缘人看到错误请指出!感激万分!