21xrx.com
2024-11-22 07:18:25 Friday
登录
文章检索 我的文章 写文章
Java代码实现循环链表教程
2023-06-15 07:38:32 深夜i     --     --
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实现、循环链表、节点操作

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复