双列表的使用

双列表
1.如何在Java中定义一个节点
可以这样做:

public class Node {
    public int no ;//可以自己定义该节点的相关1属性
    public Node nextNode;//指向下一个节点
    public Node preNode;//指向前一个节点
    public Node(int no){
        this.nextNode =null;
        this.preNode =null;
        this.no =no;
    }

注意事项:
头节点不能动private Node hedaNode = new Node(999999999);我们后面的操作都是依靠一个扫描节点Node scan =headNode;来帮助我们完成

2.添加节点到列表中

public void addNode(Node node){
        Node scan  = hedaNode;
        for ( ; scan.nextNode != null ;scan= scan.nextNode );
        scan.nextNode =node;
        node.preNode =scan;
    }

3.双列表的添加节点
在这里插入图片描述
该图为双列表的头插法插入节点 插入的节点的数据只有一个:no =100
代码实现为:

public void insertFirst(){
        Scanner sc= new Scanner(System.in);
        int nums  =sc.nextInt();
        Node node = new Node(nums);//new 一个需要添加的节点
        Node scan =hedaNode;//定义一个指向头节点的节点,因为头节点不能动
        Node cur  =hedaNode.nextNode;//定义一个指向头节点下一个节点的节点
        if (cur == null){
            scan.nextNode =node;
            node.preNode =scan;
        }else {
            node.nextNode=cur;
            cur.preNode =node;
            node.preNode=scan;
            scan.nextNode =node;
        }
    }

4.获取列表长度
依然是定义一个辅助节点Node scan 来扫描 直到sacn.next == null
就可以得到列表长度
代码实现

public int getListSize(){
        int size = 0 ;
        for (Node scan = hedaNode; scan.nextNode != null ; scan =scan.nextNode){
            size++;
        }
        return size;
    }

5.删除指定的第K个节点 依然还是定义一个辅助节点 Node scan =hedaNode;并利用for循环来扫描全部节点

  1. 当第K个节点不存在的时候,直接return并提示该节点不存在
  2. 删除最后一个节点,即当扫描结束时scan.nextNode == null
  3. scan.preNode.nextNode =null; scan.preNode =null;
  4. 删除中间节点scan.preNode.nextNode = scan.nextNode; scan.nextNode.preNode = scan.nextNode; scan.nextNode = null; scan.preNode = null;
public void deleteNode(int k){
       Node scan =hedaNode;
        for (int i = 1 ; i <= k; scan =scan.nextNode,i++ );
        if (scan ==null){
            System.out.println("该节点不存在!");
            return;
        }else if(scan.nextNode == null){
            scan.preNode.nextNode =null;
            scan.preNode =null;
        }else {
            scan.preNode.nextNode = scan.nextNode;
            scan.nextNode.preNode = scan.nextNode;
            scan.nextNode = null;
            scan.preNode = null;
        }

    }

6.遍历节点:
当所有操作做完后我们需要查看一下自己的列表,所以我们需要对我们的列表进行遍历

public void showDoubleList(){
        for (Node scan = hedaNode.nextNode ; scan != null ; scan = scan.nextNode ){
            System.out.println(scan.no);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值