zoukankan      html  css  js  c++  java
  • 单链表的实现(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("
    链表遍历结束!!");
        }
    
        // 链表头部添加元素
        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));
            }
        }
    }
  • 相关阅读:
    数据库新秀 postgresql vs mongo 性能PK
    mongodb索引--1亿条记录的查询从55.7秒到毫秒级别<补充版>
    nodejs npm install -g 全局安装和非全局安装的区别
    nodejs express template (模版)的使用 (ejs + express)
    CSS3动画:YouTube的红色激光进度条
    IE bug之location.href没有referer
    工程师
    Shadow DOM的事件绑定
    IE回车的一个怪异行为
    CSS3全新的背景图片方案
  • 原文地址:https://www.cnblogs.com/tangxlblog/p/9947574.html
Copyright © 2011-2022 走看看