在Java中对单链表的一系列操作

链表的定义

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

}

向链表中依次向后插入节点

public ListNode insertNode(ListNode head, int val) {
    /**
    *  插入节点
    */
        
    if(head == null) { // 链表中没有节点,插入第一个节点
        ListNode node = new ListNode(val);
        head = node;
        return head;
    }
        
        
    ListNode zhizhen = head;
    while(head.next != null) { // 向链表中间插入一个节点
        head = head.next;
    }
    ListNode node = new ListNode(val);
    head.next = node;
        
        
    return zhizhen;
        
}

 获取链表中节点的个数

public int length(ListNode head) {
     /**
     * 获取链表中节点的个数
     */
     int num = 0;
     ListNode zhizhen = head;
     while(zhizhen != null) {
         num += 1;
         zhizhen = zhizhen.next;
     }
        
     System.out.println("共有" + num);

     return num;

}

 从头结点开始遍历单链表

public static void traverse(ListNode head) {
    /**
     * 遍历链表中的所有节点
     */
        
     ListNode zhizhen = head;
     while(zhizhen != null) {
         System.out.println("node->" + zhizhen.val);
         zhizhen = zhizhen.next;
     }
}

 删除第一个遇到的节点

public ListNode deleteNode(ListNode head, int val) {
      /**
       * 删除节点
       */
        
      ListNode temp = head;
        
      if(head.val == val) { // 对应的节点是第一个节点
          temp = head.next;
          return temp;
      }
        
      while(head.next != null && head.next.val != val) {// 通过while循环,找到对应的节点
          head = head.next;
      }
        
      if(head.next == null) { // 当遍历完所有节点时,没有找到对应的节点
          System.out.println("链表中没有节点" + val);
          return temp;
            
      }else {
            
          if(head.next.next != null) {
              head.next = head.next.next;
          }else { // 对应的节点是最后一个节点
              head.next = null;
          }
      }
        
      return temp;
        
}

在有序链表中,删除所有重复的元素,使得每个元素只出现一次 

public ListNode deleteDuplicates(ListNode head) {
      /**
       * 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
       */
        
      if(head == null) {
          return head;
      }
        
      ListNode temp = head;
      int num = head.val;
      while(head.next != null) {
            
          if (head.next.val == num) {
              head.next = head.next.next;
          }else {
              head = head.next;
              num = head.val;
          }
            
      }
        
      return temp;
}

 将单链表中的节点反转

public ListNode reverseList(ListNode head) {
        
      /**
       * 反转一个单链表。
       */
      if(head == null) {
          return head;
      }
        
      ListNode temp = null;
      while(head != null) {
          if (temp == null) {
              temp = new ListNode(head.val);
          }else {
              ListNode s = new ListNode(head.val);
              s.next = temp;
              temp = s;
          }
            
          head = head.next;
      }

      return temp;
 }

Java中关于树的操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值