1. 程式人生 > >Java實現單鏈表的插入、刪除、計算連結串列的長度和輸出連結串列

Java實現單鏈表的插入、刪除、計算連結串列的長度和輸出連結串列

首先定義單鏈表(以下統稱為連結串列):

連結串列有兩部分:資料和指向下一個節點的指標。

這裡引用書中的一張圖片:

一般是知道頭指標,然後根據頭指標做插入、刪除、反轉、排序、輸出等操作。

使用Java實現連結串列的結構如下:

/**
 * 連結串列的結構
 * @author haoge
 */
public class Node {
    //連結串列節點的資料
    int data;
    //連結串列指向的下一個節點的指標
    Node next = null;

    public Node(int data) {
        this.data = data;
    }
}

連結串列的操作部分:

/**
 * 連結串列的插入、刪除、計算長度和列印連結串列
 * @author haoge
 *
 */
public class MyNode {

    public static void main(String[] args) {
        MyNode mNode = new MyNode();
        //連結串列的頭指標
        Node head = null;

        //新增節點,第一次新增時需要返回頭指標,用於定位連結串列
        head = mNode.insertNode(2, head);
        mNode.insertNode(5
, head); mNode.insertNode(4, head); mNode.insertNode(3, head); mNode.insertNode(1, head); //連結串列的長度 System.out.println("連結串列的長度為:" + mNode.length(head)); //輸出節點 mNode.printList(head); //刪除節點 if ((head = mNode.deleteNode(2, head)) != null
) { System.out.println("刪除索引為2的節點後:"); mNode.printList(head); } else { System.out.println("刪除失敗!"); mNode.printList(head); } //刪除頭結點測試 if ((head = mNode.deleteNode(1, head)) != null) { System.out.println("刪除頭節點後:"); mNode.printList(head); } else { System.out.println("刪除失敗!"); mNode.printList(head); } } /** * 新增節點 * @param data */ public Node insertNode(int data, Node head) { Node node = new Node(data); if (head == null) { head = node; return head; } Node curNode = head; //迴圈找到當前連結串列的尾節點 while (curNode.next != null) { curNode = curNode.next; } //尾節點的指標指向新增加的節點 curNode.next = node; return head; } /** * 連結串列的長度 * @return */ public int length(Node head) { Node curNode = head; int length = 0; while (curNode != null) { curNode = curNode.next; length ++; } return length; } /** * 刪除節點 */ public Node deleteNode(int index, Node head) { //刪除的節點的索引小於1或者大於連結串列的長度,直接返回false if (index < 1 || index > length(head)) { return null; } //刪除頭結點 if (index == 1) { head = head.next; return head; } //從頭結點的下一個節點開始遍歷 Node curNode = head.next; //記錄當前迴圈的節點的上一個節點用於刪除當前節點 Node preNode = head; int i = 2; while (curNode != null) { if (i == index) { //前一個節點的next指向當前節點的下一個節點,即刪除當前節點 preNode.next = curNode.next; break; } else { preNode = curNode; curNode = curNode.next; } } return head; } /** * 列印連結串列 */ public void printList(Node head) { Node curNode = head; //迴圈遍歷到尾節點 while (curNode != null) { System.out.print(curNode.data + " "); curNode = curNode.next; } System.out.println(); } }

輸出結果:

連結串列的長度為:5
2  5  4  3  1  
刪除索引為2的節點後:
2  4  3  1  
刪除頭節點後:
4  3  1