题解 | #【模板】链表#

【模板】链表

https://www.nowcoder.com/practice/97dc1ac2311046618fd19960041e3c6f

import java.util.Scanner;
class LinkedNode{
  /*
  int的取值范围是-2147483648~2147483647,为防止头结点中数据和有效节点的值冲突,
  所以初始值设为长整型的2147483648
  */
  long value = 2147483648l;
  LinkedNode next = null;
}

class LinkedList{
  LinkedNode head = new LinkedNode();//链表头结点
  
  //插入
  void insert(int x, int y){
    LinkedNode temp = head;
    LinkedNode temp1 = null;//用来记录值为x的节点的前面一个节点
    LinkedNode linkedNode = new LinkedNode();
    linkedNode.value = y;

    while(temp.next != null && temp.value != x){//当前节点不是最后一个节点,并且当前节点的值不是x,循环继续
      if(temp.next.value == x){//记录值为x的节点的前一个节点
        temp1 = temp;
      }
      temp = temp.next;
    }

    if(temp1 == null){
/*链表中不存在值为x的节点时,直接在表尾插入,
这里的判断条件为"temp1 == null",而不是"temp.next == null",是因为值为x的节点有可能在链表的最后一个*/
      temp.next = linkedNode;
    }else{
      temp1.next = linkedNode;
      linkedNode.next = temp;
    }
  }
  
  //删除
  void delete(int x){
    LinkedNode temp = head;
    LinkedNode temp1 = null;//用来记录值为x的节点的前面一个节点

    while(temp.next != null && temp.value != x){
      if(temp.next.value == x){//用来记录值为x的节点的前面一个节点
        temp1 = temp;
      }
      temp = temp.next;
    }
	if(temp1 == null){//值为x的节点的前一个节点不存在,即链表中没有值为x的节点
      return;
    }else{
      temp1.next = temp.next;
    }
  }

  //输出链表元素
  void printLinkedList(){
    if(head.next == null){
      System.out.println("NULL");
    }else{
      LinkedNode temp = head.next;
      while(temp.next != null){
        System.out.print(temp.value+" ");
        temp = temp.next;
      }
      System.out.println(temp.value);
    }
  }

}
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        LinkedList linkedList = new LinkedList();

        Scanner in = new Scanner(System.in);
        int n = Integer.parseInt(in.nextLine());
        // 注意 hasNext 和 hasNextLine 的区别
        for(int i=0; i<n; i++){
          String test = in.nextLine();
          String[] str = test.split(" ");
          switch(str[0]){
            case "insert":
              int x = Integer.parseInt(str[1]);
              int y = Integer.parseInt(str[2]);
              linkedList.insert(x,y);
              break;
            case "delete":
              int x1 = Integer.parseInt(str[1]);
              linkedList.delete(x1);
              break;
          }
          if(i == n-1){
            linkedList.printLinkedList();
          }
        }
    }
}

全部评论

相关推荐

程序员牛肉:继续沉淀吧同学,你这就是纯纯的流水线产品。 差不多的学历+两个烂大街项目。自身学历又不行,现在找啥实习呢。有点太浮躁了。多花点心思搞搞ai,开源和八股。这比你这段时间捣鼓一段小厂实习要好得多;
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务