链表介绍

单向链表

单向链表节点结构

public class Node {
   public int value;
   public Node next;
   public Node(int data) {
       value = data;
  }
}

双向链表

双向链表节点结构
public class DoubleNode {
   public int value;
   public DoubleNode last;
   public DoubleNode next;

   public DoubleNode(int data) {
       value = data;
  }
}

单链表和双链表如何反转

    /**
    * 单链表反转
    * @param head
    * @return
    */
   private static Node reverseNodeList(Node head) {
       Node pre=null;
       Node next=null;
       while(head!=null){
           next=head.next;
           head.next=pre;
           pre=head;
           head=next;
      }
       return pre;
  }
   /**
    * 双链表反转
    * @param head
    * @return
    */
   public static DoubleNode reverseDoubleNode(DoubleNode head){
       DoubleNode pre=null;
       DoubleNode next=null;
       while(head!=null){
           next=head.next;
           head.next=pre;
           head.last=next;
           pre=head;
           head=next;
      }
       return pre;
  }

把给定值都删除

    /**
    * 删除链表中的某一个值
    * @param head
    * @param num
    * @return
    */
   public static Node deleteNode(Node head,int num){
       while (head!=null){
           if (head.value!=num){   //头结点是否需要删除
               break;
          }
           head=head.next;
      }
       Node pre=head;
       Node next=head;
       while(next!=null){
           if (next.value==num){
               pre.next=next.next;
          }else{
               pre=next;
          }
           next=next.next;
      }
       return head;
  }



posted @ 2021-08-26 10:15  习惯1991  阅读(40)  评论(0编辑  收藏  举报