16、Java数据结构与算法——数据结构篇之线性表4

1、循环单链表

环单链表是一种特殊的单链表。它的特点是表中最后一个节点的指针指向头节点,形成一个环。

public class Node {
    int data;
    Node next;

    // Node constructor
    public Node(int data) {
        this.data = data;
    }
}

2、单链表和循环单链表的比较

单链表和循环单链表的主要区别在于链表的尾部。在单链表中,最后一个节点的指针指向null,表示链表的结束。而在循环单链表中,最后一个节点的指针指向头节点,形成一个环。

这种结构的一个优点是从链表的尾部到头部的转换是无缝的,这在某些应用中可能很有用。例如,如果你正在实现一个音乐播放器的播放列表,循环链表可以让你在播放完最后一首歌曲后自动回到第一首歌曲。

3、循环双链表

循环双链表是双链表和循环单链表的结合。它的特点是表中最后一个节点的next指针指向头节点,头节点的prev指针指向最后一个节点,形成一个环。

public class Node {
    int data;
    Node prev;
    Node next;

    // Node constructor
    public Node(int data) {
        this.data = data;
    }
}

4、双链表的插入(循环双链表)

在循环双链表中插入节点的操作与双链表类似,但需要处理头节点和尾节点的指针。

public void append(int newData) {
    Node newNode = new Node(newData);
    Node last = head;  // Start from the head

    // If the list is not empty, go to the end of the list
    while (last.next != head) {
        last = last.next;
    }

    // Insert the new node at the end
    last.next = newNode;
    newNode.prev = last;
    newNode.next = head;
    head.prev = newNode;
}

5、循环双链表的删除

在循环双链表中删除节点的操作也与双链表类似,但需要处理头节点和尾节点的指针。

public void deleteNode(int key) {
    Node temp = head;  // Start from the head

    // Find the node to be deleted
    while (temp.data != key) {
        if (temp.next == head) {
            System.out.println("The node with key " + key + " is not found");
            return;
        }
        temp = temp.next;
    }

    // Unlink the node from the list
    if (temp.next != head) {
        temp.next.prev = temp.prev;
    }
    if (temp.prev != head) {
        temp.prev.next = temp.next;
    }

    // If the node to be deleted is head
    if (temp == head) {
        if (temp.next == head) {  // The list has only one node
            head = null;
        } else {
            head = temp.next;
            head.prev = temp.prev;
        }
    }
}

以上就是Java数据结构与算法——数据结构篇之线性表4的全部内容,作者能力有限,如果不足请及时指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值