package com.data_structs;
class Link {
public E data;
public Link next;
public Link(E data) {
this.data = data;
}
}
class LinkList {
public Link first;
// 連結清單中資料項的個數
public int size;
public LinkList() {
first = null;
size = 0;
}
// 在表頭插入新的資料
public void insertFirst(E value) {
Link link = new Link(value);
link.next = first;
first = link;
size++;
}
// 判斷連結清單是否為空
public boolean isEmpty() {
return size == 0;
}
// 删除表頭
public Link deleteFirst() {
Link temp = first;
first = first.next;
size--;
return temp;
}
// 删除連結清單中的資料(按序号)
public void deleDataByIndex(int index) {
if (index >= size || index < 0)
try {
throw new IndexOutOfBoundsException();
} catch (Exception ex) {
ex.printStackTrace();
}
Link curr = get(index); // 目前節點
if (index == 0) {
first = first.next;
size--;
return;
}
Link prev = get(index - 1); // 前一個節點
System.out.println("curr.next.data:" + curr.data);
prev.next = curr.next.next;
size--;
}
// 删除連結清單中的數值
public void deleteValue(E value) {
Link prev = null;
Link curr = null;
for (int i = 0; i < size; i++) {
// 找到了值
if (this.get(i).data == value) {
System.out.println("i: " + i);
// 删除的正好是第一個元素
if (i == 0) {
first = first.next;
size--;
} else {
prev = get(i - 1);
curr = get(i);
// 删除的是最後一個元素
if (i == size - 1) {
prev.next = null;
} else {
prev.next = curr.next;
}
size--;
}
}
}
}
// 輸對外連結表中的所有資料
public void display() {
Link curr = first;
while (curr != null) {
System.out.print(curr.data + " ");
curr = curr.next;
}
System.out.println();
}
// 傳回連結清單中資料項的個數
public int size() {
return size;
}
// 擷取從頭至尾的第i個資料項
public Link get(int i) {
if (i > size() - 1 || i < 0)
try {
throw new IndexOutOfBoundsException();
} catch (IndexOutOfBoundsException ex) {
ex.printStackTrace();
}
Link curr = first;
for (int n = 0; n < size(); n++) {
if (n == i)
return curr;
else
curr = curr.next;
}
return null;
}
// 輸出從頭至尾的第i個資料項
public void remove(int i) {
if (i == 0)
deleteFirst();
else if (i == size() - 1)
get(i - 1).next = null;
else {
get(i - 1).next = get(i + 1);
}
size--;
}
}
public class Link_list {
public static void main(String[] args) {
LinkList ll = new LinkList();
// 添加資料
ll.insertFirst((long) 10);
ll.insertFirst((long) 12);
ll.insertFirst((long) 1);
ll.insertFirst((long) 17);
ll.insertFirst((long) 12);
ll.insertFirst((long) 10);
ll.insertFirst((long) 18);
ll.insertFirst((long) 22);
ll.insertFirst((long) 34);
ll.insertFirst((long) 52);
ll.display();
System.out.println("擷取數值:");
System.out.println(ll.get(1).data);
System.out.println("删除數值:(按序号)");
ll.deleDataByIndex(0);
System.out.println("删除數值:(按數值)");
ll.deleteValue((long) 17);
ll.display();
}
}
分享到:
2012-12-06 15:53
浏覽 842
評論