如何从Java中的循环链表中删除节点?

时间:2016-05-18 18:57:41

标签: java linked-list circular-list

给定循环链表在Java中编写一个删除节点的方法。

1 个答案:

答案 0 :(得分:-1)

实际上有四种情况需要考虑。

案例1:

列表是空的吗?如果是,则返回null或返回

案例2:

列表中只有一个元素。 将指针设置为null,将列表设置为null。

案例3:

删除列表前面的内容。 在这种情况下,我们有几个步骤。

<强>步骤:

  1. 制作一个指向列表的临时指针。
  2. 移至列表末尾。
  3. 将临时指针设置为列表的前面。
  4. 向前移动列表的前面。
  5. 将temp的指针设置为null。
  6. 将列表的结尾设置为指向列表的新前端。
  7. 案例4:

    以此格式删除内容1-&gt; 2-&gt; 3-&gt;我们在哪里删除中间项目。 注意即可。这也适用于删除最后一项,因为它会循环回到1。

    <强>步骤

    1. 制作指向列表的临时指针。
    2. 向前移动临时指针,直到找到要删除的数据。
    3. 创建一个删除节点(示例节点删除)并将其设置为temp的指针。
    4. 设置temp以跳过我们正在删除的节点。
    5. 将删除节点的指针设置为null。

      public void delete(int data) {
          // Null list case
          if(list == null) return;
      
          // Delete the only element case
          if(list.data == data && list.next.data == list.data) {
              list.next = null;
              list = null;
              return;
          }
      
          // Delete the front of the list case
          if(list.data == data) {
      
              // Move to the end of the list
              Node end = list;
              while(end.next.data != list.data) {
                  end = end.next;
              }
      
              Node temp = list;   
              list = list.next;
              temp.next = null;
              end.next = list;
              return;
          }
      
          // Delete something in the middle
          Node temp = list;
          while(temp.next.data != data && temp.next.data != list.data) {
              temp = temp.next;
          }
      
          // We circled the list and did not find the element to delete       
          if(temp.next.data == list.data) return; 
      
          Node del = temp.next;
          temp.next = temp.next.next;
          del.next = null;
      }