解题思路:

双向链表实现链表删除;

在添加操作时比单链表多了一个指向前面的元素的操作;

删除比单链表方便,这时的删除是直接指向当前要删除的元素,多了temp.pre.next=tem.next;temp.next.pre=temp.pre,但最后这个要防止空指针异常



注意事项:

求助!!!有两个运行超时,怎么优化??

参考代码:

import java.util.Scanner;

public class Main {
   public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       int n=scanner.nextInt();
     DoubleLinkedList doubleLinkedList=new DoubleLinkedList();
       for (int i=1;i<=n;i++){
         int a=scanner.nextInt();
           Node node=new Node(a);
           doubleLinkedList.add(node);
       }
       int b=scanner.nextInt();
       for(int i=0;i<n;i++)
       {
           doubleLinkedList.delete(b);
       }
       doubleLinkedList.list();





   }
}
class  DoubleLinkedList{
   private Node head=new Node(-1);
   //添加操作,切记连接双向链表
   public void add(Node node){
       Node temp=head;
       while (true){
           if (temp.next==null){
               break;
           }
           temp=temp.next;
       }
       temp.next=node;
       node.pre=temp;
   }
   public void delete(int no){
       if (head.next==null){
           //表明链表为空
           return;
       }
       Node temp=head.next;
       boolean flag=false;
       while (true){
           if (temp==null){
               break;
               //表明到尾部了
           }
           if (temp.no==no){
               flag=true;
               break;
           }
           temp=temp.next;
       }
       if (flag){
           temp.pre.next=temp.next;
           if (temp.next!=null){
               temp.next.pre=temp.pre;
           }
       }

   }
   //显示链表【遍历】
   public void list() {
       //判断链表为空
       if (head.next == null) {
           System.out.println("链表为空");
           return;
       }

       Node temp = head.next;
       while (true) {
         
           if (temp == null) {
               break;
           }
           //输出节点的信息
           System.out.print(temp+"");
           //将next后移
           temp = temp.next;
       }
   }

   }
   

class Node{
   public int no;
   public Node next;
   public  Node pre;

   public Node(int no) {
       this.no = no;
   }

   @Override
   public String toString() {
       return
              no +" ";
   }
}

点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论