1、源码

Player2 实体类

  1. package com.study.linkedlist;
  2. public class Player2 {
  3. public int no;
  4. public String name;
  5. public Player2 next;
  6. public Player2 pre;
  7. public Player2(int no, String name) {
  8. this.no = no;
  9. this.name = name;
  10. }
  11. public Player2() {
  12. }
  13. @Override
  14. public String toString() {
  15. return "Player2{" +
  16. "no=" + no +
  17. ", name='" + name + '\'' +
  18. '}';
  19. }
  20. }

DoubleLinkedList类

package com.study.linkedlist;

import java.util.Stack;

public class DoubleLinkedList {

    //初始化头结点
    private Player2 p = new Player2(0,"");

    public Player2 getP() {
        return p;
    }


    //显示整个链表
    public void show(){

        //判断链表是否为空
        if(p.next==null){
            System.out.println("链表为空");
            return;
        }
        //定义一个辅助头结点
        Player2 temp = p.next;
        //遍历链表
        while (temp!=null){
            System.out.println(temp);
            temp = temp.next;
        }
    }

    //添加方法二:按顺序添加,并且添加编号相同的数据时提示添加错误
    public void addByNo(Player2 player){

        //定义一个零时的头结点
        Player2 temp = p;
        while (temp!=null){
            if (player.no < temp.no){
                temp.pre.next = player;
                player.pre = temp.pre;
                temp.pre = player;
                player.next = temp;
                break;
            }else if (temp.no == player.no){
                System.out.println("球员已经存在,不能加入" + temp.no + temp.name);
                break;
            }
            if (temp.next==null){
                temp.next =player;
                player.pre = temp;
                break;
            }
            temp = temp.next;

        }
    }

    //根据编号修改球员信息
    public void updateByNo(Player2 player){

        //判断链表是否为空
        if (p.next==null){
            System.out.println("链表为空");
            return;
        }
        Player2 temp = p.next;
        boolean flag = false;
        while (true){
            if(temp.next==null){
                break;
            }
            if(temp.no==player.no){
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if(flag){
            temp.name= player.name;
        }else {
            System.out.println("没有找到改球员");
        }
    }

    //根据编号删除节点
    public void deleteByNo(int no){
        //判断链表是否为空
        if (p.next==null){
            System.out.println("链表为空");
            return;
        }
        Player2 temp = p.next;
        boolean flag = false;
        while (true){
            if(temp==null){
                break;
            }
            if(temp.no==no){
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if (flag){
            temp.pre.next = temp.next;
            if(temp.next==null){
                temp.pre.next = null;
            }else {
                temp.next.pre = temp.pre;
            }
        }else {
            System.out.println("没有找到改球员");
        }

    }
}

DoubleLinkedListDemo测试类

package com.study.linkedlist;

public class DoubleLinkedListDemo {

    public static void main(String[] args) {
        DoubleLinkedList doubleLinkedList = new DoubleLinkedList();
        doubleLinkedList.addByNo(new Player2(11,"欧文"));
        doubleLinkedList.addByNo(new Player2(34,"字母哥"));
        doubleLinkedList.addByNo(new Player2(23,"詹姆斯"));
        doubleLinkedList.addByNo(new Player2(24,"科比"));
        doubleLinkedList.addByNo(new Player2(13,"哈登"));
//        doubleLinkedList.addByNo(new Player2(13,"哈登"));
//        doubleLinkedList.updateByNo(new Player2(13,"123"));
//        doubleLinkedList.deleteByNo(34);

        doubleLinkedList.show();
    }

}

部分测试结果

图片.png

2、总结

2.1、初始化头结点

//初始化头结点
private Player2 p = new Player2(0,"");

public Player2 getP() {
    return p;
}

2.2显示整个链表

//显示整个链表
public void show(){

    //判断链表是否为空
    if(p.next==null){
        System.out.println("链表为空");
        return;
    }
    //定义一个辅助头结点
    Player2 temp = p.next;
    //遍历链表
    while (temp!=null){
        System.out.println(temp);
        temp = temp.next;
    }
}

2.3、添加节点(按顺序添加,并且添加编号相同的数据时提示添加错误)

//添加方法二:按顺序添加,并且添加编号相同的数据时提示添加错误
public void addByNo(Player2 player){

    //定义一个零时的头结点
    Player2 temp = p;
    while (temp!=null){
        if (player.no < temp.no){
            temp.pre.next = player;
            player.pre = temp.pre;
            temp.pre = player;
            player.next = temp;
            break;
        }else if (temp.no == player.no){
            System.out.println("球员已经存在,不能加入" + temp.no + temp.name);
            break;
        }
        if (temp.next==null){
            temp.next =player;
            player.pre = temp;
            break;
        }
        temp = temp.next;

    }
}

2.4、修改节点

//根据编号修改球员信息
public void updateByNo(Player2 player){

    //判断链表是否为空
    if (p.next==null){
        System.out.println("链表为空");
        return;
    }
    Player2 temp = p.next;
    boolean flag = false;
    while (true){
        if(temp.next==null){
            break;
        }
        if(temp.no==player.no){
            flag = true;
            break;
        }
        temp = temp.next;
    }
    if(flag){
        temp.name= player.name;
    }else {
        System.out.println("没有找到改球员");
    }
}

2.5、删除节点

//根据编号删除节点
public void deleteByNo(int no){
    //判断链表是否为空
    if (p.next==null){
        System.out.println("链表为空");
        return;
    }
    Player2 temp = p.next;
    boolean flag = false;
    while (true){
        if(temp==null){
            break;
        }
        if(temp.no==no){
            flag = true;
            break;
        }
        temp = temp.next;
    }
    if (flag){
        temp.pre.next = temp.next;
        if(temp.next==null){
            temp.pre.next = null;
        }else {
            temp.next.pre = temp.pre;
        }
    }else {
        System.out.println("没有找到改球员");
    }

}