데이터 구조: 양 방향 링크 의 삭제 와 검사 사고 와 코드 실현

26808 단어
public class DoubleLinkedList {

    private User2 head = new User2(0, "");

    public User2 getHead() {
        return head;
    }

    /**
     *         :
     * 1.           。
     * 2.      next      
     * 3.     pre  temp
     */
    public void add(User2 user) {
        //  head      ,            
        User2 temp = head;
        //    。       
        while (true) {
            //       
            if (temp.next == null) {
                break;
            }
            //        , temp  
            temp = temp.next;
        }
        //           
        temp.next = user;
        //            temp
        user.pre = temp;
    }

    /**
     *       :
     * 1.        ID   。 temp.id ==    .id
     * 2.     temp.name =    .name;
     */
    //      。    ID      。
    public void update(User2 newUser) {
        //  
        if (head.next == null) {
            System.out.println("    。    ");
            return;
        }
        //         ,    ID
        //        。          
        User2 temp = head.next;
        while (true) {
            if (temp == null) {
                break;
            }
            //           
            if (temp.id == newUser.id) {
                temp.name = newUser.name;
                return;
            }
            //temp      
            temp = temp.next;
        }
        System.out.printf("    ID %d   ,    ", newUser.id);
    }

    /**
     *       :(    ID   )
     * 1.         temp
     * 2.temp      next    temp      
     * 3.temp      pre    temp      
     * 4.      ,          ,          。
     */
    public void delete(int id) {

        //          
        if (head.next == null) {
            System.out.println("        ");
            return;
        }
        //    。
        User2 temp = head.next;
        while (true) {
            //        
            if (temp == null) {
                break;
            }
            //         
            if (temp.id == id) {
                //temp      next    temp      
                temp.pre.next = temp.next;
                //temp      pre    temp      
                //                    。        。
                if (temp.next!=null){
                    temp.next.pre = temp.pre;
                }
                return;
            }
            //temp      
            temp = temp.next;
        }
        System.out.printf("      %d   ", id);
    }
    /**
     *   ID      :
     * 1.               ,
     * 2.     .next    temp.next
     * 3. temp.next.pro        。
     * 4.     .pre  temp
     * 5. temp.next      。
     */
    public void addByOrder(User2 user) {
        //        。                      。
        //    temp               。      。
        User2 temp = head;
        while (true) {
            //   null        。           。
            if (temp.next == null) {
                break;
            }
            //             ID     ID ,     (           。)
            if (temp.next.id > user.id) {
                break;
            } else if (temp.next.id == user.id) {
                //           。      
                System.out.printf("  %d   。    。", user.id);
                return;
            }
            temp = temp.next;
        }
        //.     .next    temp.next
        user.next = temp.next;
        if (temp.next!=null)   temp.next.pre = user;
        user.pre = temp;
        temp.next = user;
        // temp.next      。
    }
    //         
    public void showList() {
        //          
        if (head.next == null) {
            System.out.println("    ");
            return;
        }
        //        。          。
        User2 temp = head.next;
        while (true) {
            //       
            if (temp == null) {
                break;
            }
            //      
            System.out.println(temp);
            //temp      
            temp = temp.next;
        }
    }

}

class User2 {
    public int id;
    public String name;
    public User2 next;
    public User2 pre;


    public User2(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public String toString() {
        return "User2{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
class DoubleLinkedListDemo{
    public static void main(String[] args) {
        User2 user = new User2(1, "  ");
        User2 user1 = new User2(2, "  ");
        User2 user2 = new User2(3, "  ");
        User2 user3 = new User2(4, "  ");
        DoubleLinkedList list = new DoubleLinkedList();
        list.add(user);
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.showList();
        //  
        User2 newUser = new User2(1, "      ");
        list.update(newUser);
        System.out.println("      ");
        list.showList();
        //  
        list.delete(3);
        System.out.println("      ");
        list.showList();
        DoubleLinkedList list2 = new DoubleLinkedList();
        list2.addByOrder(user3);
        list2.addByOrder(user1);
        list2.addByOrder(user2);
        list2.addByOrder(user);
        list2.showList();
    }
}

좋은 웹페이지 즐겨찾기