數據結構 鏈表實現插入、刪除(Java)

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();
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章