最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)雙鏈表互相交換任意兩個節(jié)點的方法示例

 更新時間:2017年11月11日 09:55:39   作者:Dzwsss  
這篇文章主要介紹了Java實現(xiàn)雙鏈表互相交換任意兩個節(jié)點的方法,簡單講述了雙鏈表的概念,并結合實例形式給出了java雙鏈表實現(xiàn)任意兩個節(jié)點交換的操作技巧,需要的朋友可以參考下

本文實例講述了Java實現(xiàn)雙鏈表互相交換任意兩個節(jié)點的方法。分享給大家供大家參考,具體如下:

概述:

雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數(shù)據(jù)結點中都有兩個指針,分別指向直接后繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和后繼結點。一般我們都構造雙向循環(huán)鏈表。

思路:

1、確定兩個節(jié)點的先后順序
2、next、prev互相交換順序以及將換向前方的節(jié)點與之前的節(jié)點對接。(1.prev.next = 2)
3、判斷是否相鄰

實現(xiàn)代碼:

鏈表類:

public class SLink {
  public SNode head;
  public SLink() {
    this.head = new SNode();
  }
  public boolean interChangeById(int id1,int id2) {
    SNode s = head;
    SNode node1 = null,node2 = null;
    int node1Count,node2Count;
    node1Count = node2Count = 0;
    if(id1 == id2) {
      return true;
    }
    /**
     * 向下遍歷
     */
    while (s.next != null) {
      s = s.next;
      node1Count ++ ;
      if(s.student.stuId == id1) {
        /**
         * 記錄節(jié)點1
         */
        node1 = s;
        break;
      }
    }
    s = head;
    while (s.next != null) {
      s = s.next;
      node2Count ++ ;
      if(s.student.stuId == id2) {
        /**
         * 記錄節(jié)點2
         */
        node2 = s;
        break;
      }
    }
    if(node1 != null && node2 != null) {
      SNode temp = new SNode();
      /**
       * node1在后
       */
      if(node1Count > node2Count) {
        temp.next = node1.next;
        temp.prev = node1.prev;
        /**
         * 記錄那個節(jié)點就先處理那個節(jié)點
         * 1、交換next
         * 2、交換prev
         * 3、設置之前節(jié)點的next(對接)
         */
        node1.next = node2.next;
        node1.prev = node2.prev;
        node2.prev.next = node1;
        if(node1.next.equals(node1)) {
          /**
           * 說明兩個節(jié)點相鄰
           */
          node1.next = node2;
          node2.next = temp.next;
          node2.prev = node1;
        }else {
          /**
           * 說明節(jié)點不相鄰
           */
          node2.next = temp.next;
          node2.prev = temp.prev;
          temp.prev.next = node2;
        }
      }else {
        /**
         * node1在前
         */
        temp.next = node2.next;
        temp.prev = node2.prev;
        node2.next = node1.next;
        node2.prev = node1.prev;
        node1.prev.next = node2;
        if(node2.next.equals(node2)) {
          node2.next = node1;
          node1.next = temp.next;
          node1.prev = node2;
        }else {
          node1.next = temp.next;
          node1.prev = temp.prev;
          temp.prev.next = node1;
        }
      }
      return true;
    }
    return false;
  }
  public void displayStudent() {
    SNode s = head;
    while (s.next != null) {
      s = s.next;
      System.out.println(s.student);
    }
  }
}

節(jié)點類:

public class SNode {
  public Student student;
  public SNode next;
  public SNode prev;
  public SNode(Student student, SNode prev,SNode next) {
    this.student = student;
    this.next = next;
    this.prev = prev;
  }
  public SNode() {
    this.student = null;
    this.next = null;
    this.prev = null;
  }
}

Student類:

public class Student {
  public int stuId;
  public String name;
  public int age;
  public String className;
  public Student(int stuId, String name, int age, String className) {
    this.stuId = stuId;
    this.name = name;
    this.age = age;
    this.className = className;
  }
  public int getStuId() {
    return stuId;
  }
  public void setStuId(int stuId) {
    this.stuId = stuId;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public String getClassName() {
    return className;
  }
  public void setClassName(String className) {
    this.className = className;
  }
  @Override
  public String toString() {
    return "Student{" +
        "stuId=" + stuId +
        ", name='" + name + '\'' +
        ", age=" + age +
        ", className='" + className + '\'' +
        '}';
  }
}

更多關于java算法相關內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設計有所幫助。

您可能感興趣的文章:

相關文章

  • logback.xml動態(tài)配置程序路徑的操作

    logback.xml動態(tài)配置程序路徑的操作

    這篇文章主要介紹了logback.xml動態(tài)配置程序路徑的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java selenium 操作彈出窗口示例代碼

    java selenium 操作彈出窗口示例代碼

    本文主要介紹java selenium 操作彈出窗口,這里實例講解操作彈出窗口詳細流程,并附示例代碼,有需要的小伙伴可以參考下
    2016-08-08
  • 淺談hibernate之映射文件VS映射注解

    淺談hibernate之映射文件VS映射注解

    下面小編就為大家?guī)硪黄獪\談hibernate之映射文件VS映射注解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • JSON復雜數(shù)據(jù)處理之Json樹形結構數(shù)據(jù)轉Java對象并存儲到數(shù)據(jù)庫的實現(xiàn)

    JSON復雜數(shù)據(jù)處理之Json樹形結構數(shù)據(jù)轉Java對象并存儲到數(shù)據(jù)庫的實現(xiàn)

    這篇文章主要介紹了JSON復雜數(shù)據(jù)處理之Json樹形結構數(shù)據(jù)轉Java對象并存儲到數(shù)據(jù)庫的實現(xiàn)的相關資料,需要的朋友可以參考下
    2016-03-03
  • SpringBoot源碼 PropertySource解析

    SpringBoot源碼 PropertySource解析

    PropertySource是spring中對于鍵值屬性的一種抽象,主要是name和sourcePropertyResolver是對PropertySource提供對外的統(tǒng)一數(shù)據(jù)處理,對于占位符的處理委托于PropertyPlaceholderHelper,對Springboot?源碼 PropertySource相關知識感興趣的朋友一起看看吧
    2023-01-01
  • Java使用JDBC連接Oracle_MSSQL實例代碼

    Java使用JDBC連接Oracle_MSSQL實例代碼

    這篇文章主要介紹了Java使用JDBC連接Oracle_MSSQL實例代碼,需要的朋友可以參考下
    2014-01-01
  • Token安全存儲的幾種方式小結

    Token安全存儲的幾種方式小結

    在現(xiàn)代 Web 應用中,身份認證與授權是確保系統(tǒng)安全性的重要部分,Token被廣泛應用,作為實現(xiàn)身份認證的主要方式,然而,如何安全地存儲這些 Token,是每個開發(fā)者在構建前端應用時必須考慮的問題,本文將深入探討Token安全存儲的幾種方式,需要的朋友可以參考下
    2025-04-04
  • 使用Prometheus監(jiān)控Tomcat等java應用的狀態(tài)

    使用Prometheus監(jiān)控Tomcat等java應用的狀態(tài)

    本文介紹了如何配置Tomcat監(jiān)控,使用JMX Exporter和Prometheus進行監(jiān)控,并通過Grafana展示監(jiān)控數(shù)據(jù)
    2024-12-12
  • mybatis模糊查詢like語句該如何寫

    mybatis模糊查詢like語句該如何寫

    MyBatis模糊查詢通常使用LIKE關鍵字,結合concat函數(shù)拼接通配符%實現(xiàn),在MyBatis配置文件中,通過#{keyword}傳遞參數(shù),生成帶有通配符的查詢語句,MyBatis-Plus中,通過LambdaQueryWrapper類和like方法構建模糊查詢條件,簡化查詢操作
    2024-09-09
  • idea中引入了gb2312編碼的文件的解決方法

    idea中引入了gb2312編碼的文件的解決方法

    這篇文章主要介紹了idea中引入了gb2312編碼的文件的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08

最新評論

石楼县| 区。| 长宁区| 宾川县| 奉化市| 凤凰县| 乐亭县| 屏南县| 营口市| 凤台县| 老河口市| 和林格尔县| 静海县| 莲花县| 广西| 肥乡县| 桐柏县| 洮南市| 山东| 樟树市| 波密县| 岳西县| 大英县| 咸宁市| 全椒县| 姜堰市| 望谟县| 三门县| 乌海市| 安新县| 搜索| 岐山县| 齐齐哈尔市| 苍山县| 阿克苏市| 夏河县| 班玛县| 新巴尔虎右旗| 九寨沟县| 扶余县| 中西区|