单向链表

链表(LinkedList)简介
  1. 链表是以节点的方式来存储数据,是链式存储,如图1图2。
    在这里插入图片描述
图1.链表的一个节点

图2.一个链表,带头结点

图2.一个链表,带头结点

  1. 每个节点包含 数据域(data); 指针域(next):指向下一个节点的地址。
  2. 如图2,链表在内存的空间并不是连续的,每个节点通过指针域来指向下一个节点,而数组在内存中一个连续的区域。因为链表的这个特点,只要还有内存可以分配,那么链表就可以无限延长,而数组必须一开始指定长度且不能动态的修改长度。
  3. 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定,图2是带头结点的链表。
  4. 常见操作
  • 删除节点原理示意图
    删除地址为80的节点
删除地址为80的节点
  • 链表尾部插入节点原理示意图
    在链表末尾插入节点
在链表末尾插入节点
  • 链表中间插入节点原理示意图
    在地址为100和90的节点之间插入一个新节点
在地址为100和90的节点之间插入一个新节点
下面以一个demo来完成单链表的增删改查

1.因为链表由一个一个的节点组成,因此需要定义一个节点类(Node)。假设属性包括id、name(这些是节点的数据域),和next(指针域)。
Node
Node类如下

/**
 * 定义Node类,一个Node对象就是一个节点
 */
class Node {
   
    private int id;     // id,唯一
    private String name;        // 姓名
    private Node next;      // 指针域,指向下一个节点
    // 省略setter、getter、构造器等
}

2.定义一个SingleLinkedList单链表类,SingleLinkedList类包括一个成员变量head,是链表的头结点
SingleLinkedList类如下

// 定义StarSingleLinkedList,单向链表
class SingleLinkedList {
   
    // 初始化一个头结点,头结点不存放数据
    private Node head = new Node(0, null);

    // 添加节点
    public void append(Node node) {
   
        // 因为node的id是唯一的,添加时应该先判断新节点的id存在与否,存在了就不能添加,这里就不做处理了
        // 步骤:1.找到该链表的最后一个节点 2.将最后这个节点的指针域指向新节点
        Node temp = head;
        // 遍历链表,知道找到最后那个节点,当temp.next==null时,就找到了最后那个节点
        while (temp.getNext() != null) {
   
            // temp后移
            temp = temp.getNext();
        }
        // 将最后节点的next域指向新节点
        temp.setNext(node);
    }

    // 遍历链表
    public void list() {
   
        // 判空
        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值