Java實現單鏈表反轉操作


單鏈表是一種常見的數據結構,由一個個節點通過指針方式連接而成,每個節點由兩部分組成:一是數據域,用於存儲節點數據。二是指針域,用於存儲下一個節點的地址。在Java中定義如下:

public class Node {

private Object data;//數據域
private Node next;//指針域

public Node(Object data){
this.data = data;
}

public Node(Object data,Node next){
this.data = data;
this.next = next;
}

public Object getData() {
return data;
}

public void setData(Object data) {
this.data = data;
}

public Node getNext() {
return next;
}

public void setNext(Node next) {
this.next = next;
}

}
       單鏈表的反轉操作是面試java開發中常考的題目,筆者面試時曾被這道題虐過qaq,之后痛定思痛,研究了一番之后,寫出來與大家分享。

        先說下思路:所謂的單鏈表反轉,就是把每個節點的指針域由原來的指向下一個節點變為指向其前一個節點。但由於單鏈表沒有指向前一個節點的指針域,因此我們需要增加一個指向前一個節點的指針pre,用於存儲每一個節點的前一個節點。此外,還需要定義一個保存當前節點的指針cur,以及下一個節點的next。定義好這三個指針后,遍歷單鏈表,將當前節點的指針域指向前一個節點,之后將定義三個指針往后移動,直至遍歷到最后一個節點停止。

        OK,說完思路,直接上代碼。

public static Node reverseListNode(Node head){
//單鏈表為空或只有一個節點,直接返回原單鏈表
if (head == null || head.getNext() == null){
return head;
}
//前一個節點指針
Node preNode = null;
//當前節點指針
Node curNode = head;
//下一個節點指針
Node nextNode = null;

while (curNode != null){
nextNode = curNode.getNext();//nextNode 指向下一個節點
curNode.setNext(preNode);//將當前節點next域指向前一個節點
preNode = curNode;//preNode 指針向后移動
curNode = nextNode;//curNode指針向后移動
}

return preNode;
}
 
---------------------
作者:WeekenLin
來源:CSDN
原文:https://blog.csdn.net/lwkrsa/article/details/82015364
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM