1. 程式人生 > >2018-11-12單鏈表的實現(Java實現)

2018-11-12單鏈表的實現(Java實現)

package singlelinklist;

public class Node {
    int item;
    Node next;

    public Node(int item) {
        this.item = item;
        this.next = null;
    }
}
package singlelinklist;

public class SingleLinkList {
    Node head;

    public SingleLinkList() {

    }

    public SingleLinkList(Node head) {
        
this.head = head; } // 連結串列是否為空 public static boolean is_empty(Node head) { return head == null ? true : false; } // 連結串列長度 public static int length(Node head) { if (is_empty(head)) { return 0; } int length = 1; Node cur = head;
while (cur.next != null) { length++; cur = cur.next; } return length; } // 遍歷整個連結串列 public static void travel(Node head) { Node cur = head; System.out.println("連結串列遍歷開始!!"); while (cur != null) { System.out.print(cur.item
+ " "); cur = cur.next; } System.out.println("\n連結串列遍歷結束!!"); } // 連結串列頭部新增元素 public static void add(SingleLinkList list, int item) { Node node = new Node(item); if (is_empty(list.head)) { list.head = node; } else { node.next = list.head; list.head = node; } } // 連結串列尾部新增元素 public static void append(SingleLinkList list, int item) { Node node = new Node(item); if (is_empty(list.head)) { list.head = node; } else { Node cur = list.head; while (cur.next != null) { cur = cur.next; } cur.next = node; } } // 指定位置新增元素 public static void insert(SingleLinkList list, int pos, int item) { if (pos <= 0) { add(list, item); } else if (pos >= length(list.head)) { append(list, item); } else { Node node = new Node(item); Node pre = list.head; for (int i = 0; i < pos - 1; i++) { pre = pre.next; } node.next = pre.next; pre.next = node; } } // 刪除節點 public static void remove(SingleLinkList list, int item) { Node pre = null; Node cur = list.head; while (cur != null) { if (cur.item == item) { if (cur == list.head) { list.head = cur.next; } else { pre.next = cur.next; } break; } else { pre = cur; cur = cur.next; } } } // 查詢節點是否存在 public static boolean search(Node head, int item) { Node cur = head; while (cur != null) { if (cur.item == item) { return true; } else { cur = cur.next; } } return false; } }
package singlelinklist;

public class SingleLinkListTest {
    public static void main(String[] args) {
        Node head = new Node(100);
        SingleLinkList list = new SingleLinkList(head);
        if (SingleLinkList.is_empty(list.head)) {
            System.out.println("連結串列為空,新增元素麻利的~");
            System.out
                    .println("************************************************");
            System.out.println("連結串列的長度為:" + SingleLinkList.length(list.head));
            SingleLinkList.travel(list.head);

            System.out
                    .println("************************************************");
            System.out.println("頭部插入節點");
            SingleLinkList.add(list, 10);
            SingleLinkList.add(list, 20);
            SingleLinkList.add(list, 30);
            SingleLinkList.add(list, 15);
            SingleLinkList.add(list, 25);
            System.out.println("連結串列的長度為:" + SingleLinkList.length(list.head));
            SingleLinkList.travel(list.head);

            System.out
                    .println("************************************************");
            System.out.println("尾部插入幾個節點");
            SingleLinkList.append(list, 100);
            SingleLinkList.append(list, 200);
            SingleLinkList.append(list, 500);
            SingleLinkList.append(list, 400);
            SingleLinkList.append(list, 300);
            System.out.println("連結串列的長度為:" + SingleLinkList.length(list.head));
            SingleLinkList.travel(list.head);

            System.out
                    .println("************************************************");
            SingleLinkList.insert(list, 1, 77);
            SingleLinkList.insert(list, 0, 88);
            SingleLinkList.insert(list, SingleLinkList.length(list.head) - 1,
                    66);
            SingleLinkList.insert(list, SingleLinkList.length(list.head), 55);
            SingleLinkList.insert(list, 5, 44);
            System.out.println("連結串列的長度為:" + SingleLinkList.length(list.head));
            SingleLinkList.travel(list.head);

            System.out
                    .println("************************************************");
            System.out.println("刪除幾個節點試試....");
            SingleLinkList.remove(list, 88);
            SingleLinkList.remove(list, 55);
            SingleLinkList.remove(list, 300);
            SingleLinkList.remove(list, 44);
            SingleLinkList.remove(list, 25);
            System.out.println("連結串列的長度為:" + SingleLinkList.length(list.head));
            SingleLinkList.travel(list.head);
        } else {
            System.out.println("連結串列的長度為:" + SingleLinkList.length(list.head));
            SingleLinkList.travel(list.head);

            System.out
                    .println("************************************************");
            System.out.println("頭部插入節點");
            SingleLinkList.add(list, 10);
            SingleLinkList.add(list, 20);
            SingleLinkList.add(list, 30);
            SingleLinkList.add(list, 15);
            SingleLinkList.add(list, 25);
            System.out.println("連結串列的長度為:" + SingleLinkList.length(list.head));
            SingleLinkList.travel(list.head);

            System.out
                    .println("************************************************");
            System.out.println("尾部插入幾個節點");
            SingleLinkList.append(list, 100);
            SingleLinkList.append(list, 200);
            SingleLinkList.append(list, 500);
            SingleLinkList.append(list, 400);
            SingleLinkList.append(list, 300);
            System.out.println("連結串列的長度為:" + SingleLinkList.length(list.head));
            SingleLinkList.travel(list.head);

            System.out
                    .println("************************************************");
            SingleLinkList.insert(list, 1, 77);
            SingleLinkList.insert(list, 0, 88);
            SingleLinkList.insert(list, SingleLinkList.length(list.head) - 1,
                    66);
            SingleLinkList.insert(list, SingleLinkList.length(list.head), 55);
            SingleLinkList.insert(list, 5, 44);
            System.out.println("連結串列的長度為:" + SingleLinkList.length(list.head));
            SingleLinkList.travel(list.head);

            System.out
                    .println("************************************************");
            System.out.println("刪除幾個節點試試....");
            SingleLinkList.remove(list, 88);
            SingleLinkList.remove(list, 55);
            SingleLinkList.remove(list, 300);
            SingleLinkList.remove(list, 44);
            SingleLinkList.remove(list, 25);
            System.out.println("連結串列的長度為:" + SingleLinkList.length(list.head));
            SingleLinkList.travel(list.head);
            System.out.println(SingleLinkList.search(list.head, 15));
        }
    }
}