• 数据结构第二章:线性表的链式表示和实现


    1.代码实现

    /**
     * @description 线性表的链式表示和实现
     * @author wcc
     */
    public class MyLinkedList<T> {
        private Node<T> head;
        private int length;
        public MyLinkedList(){
            length = 0;
            head = new Node<>(null);
        }
        //在指定位置处添加结点
        public void add(T obj,int position){
            if (position<1||position>(length+1)){
                System.out.println("添加结点位置错误");
                System.exit(1);
            }
            Node<T> p = head;
            Node<T> q = p.next;
            for (int i = 0; i < position-1; i++) {
                p = q;
                q = q.next;
            }
            p.next = new Node<>(obj,q);
            length++;
        }
        //删除指定为位置的结点,并返回删除的结点对象数据,position为1,删除第一个结点
        public T delete(int position){
            if (position<1||position>length){
                System.out.println("结点元素不存在");
                System.exit(1);
            }
            Node<T> p = head;
            Node<T> q = head.next;
            for (int i = 0; i < position-1; i++) {
                p = q;
                q = q.next;
            }
            p.next = q.next;
            length--;
            return q.data;
        }
        //查找某个位置的结点数据
        public T find(int position){
            if (position<1||position>length){
                System.out.println("结点元素不存在");
                return null;
            }
            Node<T> p = head;
            for (int i = 0; i < position; i++) {
                p = p.next;
            }
            return p.data;
        }
        //查找某个数据在链表中的位置,如不存在返回-1
        public int searchNodeData(T data){
            Node<T> p = head;
            int position = 1;
            while (p.next!=null){
                p = p.next;
                if (p.data.equals(data)){
                    return position;
                }
                position++;
            }
            return -1;
        }
        public void nextOrder(){
            Node<T> p =head.next;
            while(p!=null){
                System.out.println(p.data);
                p=p.next;
            }
        }
    
        public static void main(String[] args) {
            MyLinkedList<Integer> linkedList = new MyLinkedList<>();
            linkedList.add(1,1);
            linkedList.add(2,1);
            linkedList.add(3,2);
            linkedList.add(4,1);
            linkedList.nextOrder();
            Integer delete = linkedList.delete(3);
            System.out.println("delete = " + delete);
            linkedList.nextOrder();
            Integer integer = linkedList.find(3);
            System.out.println("integer = " + integer);
            int nodeData = linkedList.searchNodeData(2);
            System.out.println("nodeData position " + nodeData);
        }
    }
    
    class Node<T> {
         T data;
         Node<T> next;
    
        public Node(Node<T> node) {
            next = node;
        }
    
        public Node(T data, Node<T> next) {
            this.data = data;
            this.next = next;
        }
    }
    
  • 相关阅读:
    python之private variable
    python实例、类方法、静态方法
    python常用option
    access
    FD_CLOEXEC
    fork后父子进程文件描述问题
    split
    信号
    kill
    进程组&Session
  • 原文地址:https://www.cnblogs.com/lovelywcc/p/14155231.html
Copyright © 2020-2023  润新知