国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 看動畫學算法之Java實現doublyLinkedList

看動畫學算法之Java實現doublyLinkedList

2022-02-12 15:41程序員那些事 Java教程

這篇文章主要介紹Java實現doublyLinkedList,LinkedList:doublyLinkedList相對比較復雜,今天就來簡單學習一下doublyLinkedList的基本操作和概,感興趣的小伙伴可以參考下面具體文章內容

簡介:

LinkedList相比,doublyLinkedList中的節點除了next指向下一個節點之外,還有一個prev之前的一個節點。所以被稱為doublyLinkedList。 doublyLinkedList是一個雙向鏈表,我們可以向前或者向后遍歷list。

今天我們來學習一下doublyLinkedList的基本操作和概念。

 

1、doublyLinkedList的構建

linkedList一樣,doublyLinkedList是由一個一個的節點構成的。而每個節點除了要存儲要保存的數據之外,還需要存儲下一個節點和上一個節點的引用。

看動畫學算法之Java實現doublyLinkedList

doublyLinkedList需要一個head節點,我們看下怎么構建:

public class DoublyLinkedList {

  Node head; // head 節點

  //Node表示的是Linked list中的節點,包含一個data數據,上一個節點和下一個節點的引用
  class Node {
      int data;
      Node next;
      Node prev;
      //Node的構造函數
      Node(int d) {
          data = d;
      }
  }
}

 

2、doublyLinkedList的操作

接下來,我們看一下doublyLinkedList的一些基本操作。

2.1 頭部插入

看動畫學算法之Java實現doublyLinkedList

頭部插入的邏輯是:將新插入的節點作為新的head節點,并且將newNode.next指向原來的head節點。

同時需要將head.prev指向新的插入節點。

看下java代碼:

  //插入到linkedList的頭部
  public void push(int newData) {
      //構建要插入的節點
      Node newNode = new Node(newData);
      //新節點的next指向現在的head節點
      //新節點的prev指向null
      newNode.next = head;
      newNode.prev = null;

      if (head != null)
          head.prev = newNode;

      //現有的head節點指向新的節點
      head = newNode;
  }

2.2 尾部插入

看動畫學算法之Java實現doublyLinkedList

尾部插入的邏輯是:找到最后一個節點,將最后一個節點的next指向新插入的節點,并且將新插入的節點的prev指向最后一個節點。

//新節點插入到list最后面
  public void append(int newData) {
      //創建新節點
      Node newNode = new Node(newData);
      //如果list是空,則新節點作為head節點
      if (head == null) {
          newNode.prev = null;
          head = newNode;
          return;
      }

      newNode.next = null;
      //找到最后一個節點
      Node last = head;
      while (last.next != null) {
          last = last.next;
      }
      //插入
      last.next = newNode;
      newNode.prev = last;
      return;
  }

2.3 插入給定的位置

看動畫學算法之Java實現doublyLinkedList

如果要在給定的位置插入節點,我們需要先找到插入位置的前一個節點,然后將前一個節點的next指向新節點。新節點的prev指向前一個節點。

同時我們需要將新節點的next指向下一個節點,下一個節點的prev指向新的節點。

 //插入在第幾個元素之后
  public void insertAfter(int index, int newData) {
      Node prevNode = head;
      for (int i = 1; i < index; i++) {
          if (prevNode == null) {
              System.out.println("輸入的index有誤,請重新輸入");
              return;
          }
          prevNode = prevNode.next;
      }
      //創建新的節點
      Node newNode = new Node(newData);
      //新節點的next指向prevNode的下一個節點
      newNode.next = prevNode.next;
      //將新節點插入在prevNode之后
      prevNode.next = newNode;
      //將新節點的prev指向prevNode
      newNode.prev = prevNode;

      //newNode的下一個節點的prev指向newNode
      if (newNode.next != null)
          newNode.next.prev = newNode;
  }

2.4 刪除指定位置的節點

看動畫學算法之Java實現doublyLinkedList

刪除節點的邏輯是:找到要刪除節點的前一個節點,和下一個節點。前一個節點的next指向下一個節點,下一個節點的prev指向前一個節點。

//刪除特定位置的節點
  void deleteNode(int index)
  {
      // 如果是空的,直接返回
      if (head == null)
          return;

      // head節點
      Node temp = head;

      // 如果是刪除head節點
      if (index == 1)
      {
          head = temp.next;
          return;
      }

      // 找到要刪除節點的前一個節點
      for (int i=1; temp!=null && i<index-1; i++)
          temp = temp.next;

      // 如果超出范圍
      if (temp == null || temp.next == null)
          return;

      // temp->next 是要刪除的節點,刪除節點
      Node next = temp.next.next;
      temp.next = next;
      Node prev = temp.next.prev;
      prev.prev = prev;
  }

到此這篇關于看動畫學算法之Java實現doublyLinkedList的文章就介紹到這了,更多相關Java實現doublyLinkedList內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://juejin.cn/post/7013539673838452767

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人h在线 | 欧美一区免费 | 91在线中文| 成人免费淫片aa视频免费 | 亚洲精品久久久久久久久久久 | 免费一区 | 亚洲精品一区二区 | 亚洲成人av在线播放 | 91精品国产欧美一区二区成人 | 日本在线一区二区 | 狠狠操电影 | 日韩视频网 | 国产精品免费精品自在线观看 | 中文字幕在线观看av | 99re免费视频精品全部 | 精品一区二区三区在线观看 | 精精国产 | 日韩精品一二三区 | 日韩精品视频一区二区三区 | 小川阿佐美88av在线播放 | 久久精品xx老女人老配少 | 日韩视频免费在线观看 | 精品在线一区二区 | 97色综合| 欧美日韩视频 | 国产偷久久9977 | 国产精品久久久久久久久久三级 | 亚洲一区二区三区四区在线 | 亚洲精品一区二区三区在线观看 | 成人午夜网 | 国内精品嫩模av私拍在线观看 | 日韩精品日韩激情日韩综合 | 成人精品网站在线观看 | 色狠狠综合天天综合综合 | 亚洲一区二区三 | 综合久久av | 久久久久久夜精品精品免费 | 亚洲免费网站 | 欧美日本韩国一区二区 | 久久久国产视频 | 亚洲精品久久久久久下一站 |