java不用api實現單連結串列反轉(二)
這篇部落格主要講述反轉連結串列相關思路。兩種方法:時間複雜度均為O(n),空間複雜度均為O(1)
方法一:頭插法
頭插法不僅可以建立單連結串列,還可以利用其思路反轉連結串列。首先把頭節點拆下,剩下的節點依次遍歷,採用頭插法,相當於從新建立連結串列。
package singleLinklistReverse;
import singleLinklistReverse.Creat.Lnode;
public class Reverse {
Lnode p;
Lnode r;
public void reverseLinklist(Lnode first) {
// TODO Auto-generated method stub
p=first.next;
while(p!=null){
System.out.println(p.data);
p=p.next;
}
p=first.next;
first.next=null;
while(p!=null){
r=p.next;
p.next=first.next;
first.next=p;
p=r;
}
p=first.next;
while(p!=null){
System.out.println(p.data);
p=p.next;
}
}
}
結果:
12345
5
4
3
2
1
1
2
3
4
5
輸入12345,採用頭插法建立單連結串列,54321是當前連結串列裡的資料;12345是反轉之後的資料。
方法二:正常思維
該方法就是遍歷到某個節點時,將其指向先前的節點,不斷遍歷知道其為空。要注意的是除頭節點外第一個節點指標為空(變為最後一個節點了嘛),要先處理它。然後遍歷完畢後要將頭節點指標指向最後一個節點。(需要三個指標)
/**
*
*/
/**
* @author Administrator
*
*/
package singleLinklistReverse_2;
import singleLinklistReverse_2.Creat.Lnode;
public class Reverse_2{
Lnode p,pre,r;
public void reverseLinklist(Lnode first) {
// TODO Auto-generated method stub
p=first.next;
while(p!=null){
System.out.println(p.data);
p=p.next;
}
p=first.next;//處理第一個節點
r=p.next;
p.next=null;
pre=first.next;
while(r!=null){
p=r;
r=r.next;
p.next=pre;
pre=p;
}
first.next=p;
p=first.next;
while(p!=null){
System.out.println(p.data);
p=p.next;
}
}
}
結果:
12345
1
2
3
4
5
5
4
3
2
1
輸入12345,採用尾插法建立單連結串列,當前連結串列裡資料為12345,反轉後資料為54321
相關文章
- java實現連結串列反轉Java
- TypeScript 實現連結串列反轉TypeScript
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- 如何在Java中反轉單連結串列?Java
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- Java單連結串列反轉圖文詳解Java
- 資料結構和演算法——Go實現單連結串列並且反轉單連結串列資料結構演算法Go
- 連結串列-單連結串列實現
- C++:用棧實現反轉連結串列,超簡單!C++
- 反轉連結串列
- 單連結串列實現
- 反轉連結串列(C++簡單區)C++
- java 反轉單連結串列,偶爾會遇到的面試題Java面試題
- [每日一題] 第二題:反轉連結串列每日一題
- JAVA基礎:語言中連結串列和雙向連結串列的實現(轉)Java
- JavaScript從反轉陣列到連結串列反轉JavaScript陣列
- 實現反轉連結串列--遞迴、迭代、雙指標、棧遞迴指標
- 反轉連結串列、合併連結串列、樹的子結構
- go 實現單向連結串列Go
- Python實現單連結串列Python
- c++實現單連結串列C++
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- Java實現單向連結串列基本功能Java
- leetcode 反轉連結串列LeetCode
- 1025 反轉連結串列
- java實現雙向連結串列Java
- 演算法題:反轉一個單連結串列&判斷連結串列是否有環演算法
- Java 單連結串列逆序Java
- 單連結串列實現原理以及具體程式碼(java)Java
- 【資料結構】連結串列(單連結串列實現+詳解+原碼)資料結構
- c語言單向連結串列逆轉實現方法C語言
- 資料結構之連結串列:206. 反轉連結串列資料結構
- leetcode 92 反轉連結串列ⅡLeetCode
- 面試必備的「反轉連結串列」面試
- Java實現連結串列帶註釋Java
- Java雙向連結串列的實現Java
- 演算法與資料結構-連結串列((linked-list)-Java實現單向連結串列演算法資料結構Java
- js實現資料結構--單連結串列JS資料結構