数据结构与算法单排日记-2020/3/6-链表之双链表

在这里插入图片描述

流程:

在这里插入图片描述

双链表的应用实例

1. 双链表的遍历,增加,修改,删除思路:

  1. 遍历 方和 单链表一样,只是可以向前,也可以向后查找
  2. 添加(默认添加到双向链表的最后):
    (1) 先找到双向链表的最后这个节点
    (2) temp.next = newHeroNode
    (3) newHeroNode.pre = temp;
  3. 修改 思路和 原来的单向链表一样.
  4. 删除:
    (1) 因为是双向链表,因此,我们可以实现自我删除某个节点
    (2) 直接找到要删除的这个节点,比如temp
    (3)temp不是最后一个节点时:
    temp.pre.next = temp.next
    temp.next.pre = temp.pre;
    (4) temp是最后一个节点时:
    temp.pre.next = null;

2. 双链表的遍历,增加,修改,删除代码实现:

public class DoubleLinkedList {
    private Node head = new Node(0, "", "");

    /*1. 遍历方和 单链表一样,只是可以向前,也可以向后查找*/
    public void list() {
        Node temp = head.next;
        if (temp == null) {
            System.out.println("链表为空");
        } else {
            while (true) {
                if (temp == null) break;
                System.out.println(temp);
                temp = temp.next;
            }
        }
    }

    /*2. 添加(默认添加到双向链表的最后):
    (1) 先找到双向链表的最后这个节点
    (2) temp.next = newHeroNode
    (3) newHeroNode.pre = temp;*/
    public void add(Node node) {
        Node temp = head;
        while (true) {
            if (temp.next == null) break;
            temp = temp.next;
        }
        temp.next = node;
        node.pre = temp;
    }

    /*3. 修改:思路和 原来的单向链表一样.*/
    public void updata(Node node) {
        Node temp = head.next;
        if (temp == null) {
            System.out.println("空链表");
        } else {
            while (true) {
                if (temp.num == node.num) {
                    temp.name = node.name;
                    temp.nickname = node.nickname;
                    break;
                } else if (temp == null) {
                    System.out.println("没有该编号的节点");
                    break;
                } else {
                    temp = temp.next;
                }
            }
        }
    }

    /*4. 删除:
     (1) 因为是双向链表,因此,我们可以实现自我删除某个节点
     (2) 直接找到要删除的这个节点,比如temp
     (3)temp不是最后一个节点时:
            temp.pre.next = temp.next
            temp.next.pre = temp.pre;
     (4)temp是最后一个节点时:
            temp.pre.next=null;

*/
    public void delete(int i) {
        Node temp = head.next;
        while (true) {
            if (temp.num == i && temp.next != null) {
                temp.next.pre = temp.pre;
                temp.pre.next = temp.next;
                break;
            } else if (temp.num == i && temp.next == null) {
                temp.pre.next = null;
                break;
            } else if (temp == null) {
                System.out.println("未找到该节点");
                break;
            } else {
                temp = temp.next;
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值