package 鏈表;
import java.util.Scanner;
public class 鏈表 {
public static void main(String[] args) {
ListNode head = new ListNode(0);
head.add(1);
head.add(2);
head.add(3);
System.out.println("初始鏈表爲:");
head.print();
System.out.println();
head.ListInsert(head);
System.out.println();
head.ListDelete(head);
}
}
class ListNode {
int data;//數據域
ListNode next;//next指針域
ListNode (int x) {
data = x;
}
public ListNode() {
}
//添加新的結點
public void add(int newData) {
ListNode newNode = new ListNode(newData);
if(this.next == null) {
this.next = newNode;
}else {
this.next.add(newData);;
}
}
//打印鏈表
public void print() {
System.out.print(this.data);
if(this.next != null) {
System.out.print("-->");
this.next.print();
}
}
//插入
public void ListInsert(ListNode node) {
System.out.println("請輸入要插入結點的位置和值:");
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();//位置
int e = sc.nextInt();//要插入的元素
ListNode p = node;
int j = 0;
if(p == null) {
//System.out.println("插入位置非法");
return;
}
while(p != null && j < i - 1) {
p = p.next;
++j;//尋找到i-1個節點,找到前一個插入位置
}
if(p == null || j > i - 1) return;//i小於1 或者大於表長+1
ListNode q = new ListNode();//生成新節點
//具體的插入操作
q.data = e;
q.next = p.next;
p.next = q;
System.out.println("插入元素後:");
node.print();
}
//刪除結點
public void ListDelete(ListNode head) {
System.out.println("請輸入要刪除的結點位置:");//刪除第i個節點
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
ListNode p = head;
ListNode q = null;
int j = 0;
while(p.next != null && j < i - 1) {//找到要刪除的位置
p = p.next;
++j;
}
if(p.next == null || j > i - 1) {
//System.out.println("刪除位置不合理");
return;
}
//開始刪除結點
q = p.next;
p.next = q.next;//刪除並釋放結點
//這塊釋放第i個節點的空間
System.out.println("刪除結點後");
head.print();
}
}
數據結構 鏈表實現插入、刪除(Java)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.