21xrx.com
2025-03-25 07:08:14 Tuesday
文章检索 我的文章 写文章
Java代码实现循环链表教程
2023-06-15 07:38:32 深夜i     12     0
Java实现 循环链表 节点操作

循环链表是一种特殊的链表,它的最后一个节点指向头结点,形成了一个环形结构。在实际应用中,循环链表可以用于时间复杂度要求较高的问题,比如约瑟夫问题、密码学中的置换等。接下来,本文将介绍如何使用Java代码实现循环链表。

1. 定义链表节点

首先,我们需要定义一个链表节点的类,包含数据和指向下一个节点的指针。代码如下:

class ListNode {
  int val;
  ListNode next;
  
  public ListNode(int val)
    this.val = val;
    this.next = null;
  
}

2. 实现循环链表类

在循环链表类中,我们需要实现以下几个方法:

- 在链表末尾添加节点

- 在链表头部添加节点

- 删除指定位置的节点

- 遍历链表并输出节点值

代码如下:

class CircularLinkedList {
  private ListNode tail;
  public CircularLinkedList()
    tail = null;
  
  
  // 在链表末尾添加节点
  public void add(int val) {
    ListNode newNode = new ListNode(val);
    if (tail == null)
      tail = newNode;
      tail.next = tail;
     else
      newNode.next = tail.next;
      tail.next = newNode;
      tail = newNode;
    
  }
  
  // 在链表头部添加节点
  public void addFirst(int val) {
    ListNode newNode = new ListNode(val);
    if (tail == null)
      tail = newNode;
      tail.next = tail;
     else
      newNode.next = tail.next;
      tail.next = newNode;
    
  }
  
  // 删除指定位置的节点
  public void delete(int index) {
    if (tail == null) {
      throw new RuntimeException("链表为空");
    }
    if (index == 0)
      tail.next = tail.next.next;
      return;
    
    ListNode cur = tail.next;
    int i = 0;
    while (cur != tail && i < index - 1) {
      cur = cur.next;
      i++;
    }
    if (i != index - 1) {
      throw new RuntimeException("删除失败,超出链表长度");
    }
    cur.next = cur.next.next;
    if (cur.next == tail)
      tail = cur;
    
  }
  
  //遍历链表并输出节点值
  public void print() {
    if (tail == null) {
      System.out.println("空链表");
    }
    ListNode cur = tail.next;
    do {
      System.out.print(cur.val + " ");
      cur = cur.next;
    } while (cur != tail.next);
    System.out.println();
  }
}

3. 测试代码

public static void main(String[] args) {
  CircularLinkedList list = new CircularLinkedList();
  list.add(1);
  list.addFirst(0);
  list.add(2);
  list.add(3);
  list.print();
  list.delete(2);
  list.print();
}

输出结果为:

0 1 2 3
0 1 3

4. 关键词

Java实现、循环链表、节点操作

  
  

评论区

    相似文章