Java实现单链表反转操作
? 單鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),由一個(gè)個(gè)節(jié)點(diǎn)通過指針方式連接而成,每個(gè)節(jié)點(diǎn)由兩部分組成:一是數(shù)據(jù)域,用于存儲節(jié)點(diǎn)數(shù)據(jù)。二是指針域,用于存儲下一個(gè)節(jié)點(diǎn)的地址。在Java中定義如下:
public class Node {
? ??
? ? private Object data;//數(shù)據(jù)域
? ? 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;
? ? }
?
}
? ? ? ?單鏈表的反轉(zhuǎn)操作是面試java開發(fā)中常考的題目,筆者面試時(shí)曾被這道題虐過qaq,之后痛定思痛,研究了一番之后,寫出來與大家分享。
? ? ? ? 先說下思路:所謂的單鏈表反轉(zhuǎn),就是把每個(gè)節(jié)點(diǎn)的指針域由原來的指向下一個(gè)節(jié)點(diǎn)變?yōu)橹赶蚱淝耙粋€(gè)節(jié)點(diǎn)。但由于單鏈表沒有指向前一個(gè)節(jié)點(diǎn)的指針域,因此我們需要增加一個(gè)指向前一個(gè)節(jié)點(diǎn)的指針pre,用于存儲每一個(gè)節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)。此外,還需要定義一個(gè)保存當(dāng)前節(jié)點(diǎn)的指針cur,以及下一個(gè)節(jié)點(diǎn)的next。定義好這三個(gè)指針后,遍歷單鏈表,將當(dāng)前節(jié)點(diǎn)的指針域指向前一個(gè)節(jié)點(diǎn),之后將定義三個(gè)指針往后移動,直至遍歷到最后一個(gè)節(jié)點(diǎn)停止。
? ? ? ? OK,說完思路,直接上代碼。
public static Node reverseListNode(Node head){
? ? ? ? //單鏈表為空或只有一個(gè)節(jié)點(diǎn),直接返回原單鏈表
? ? ? ? if (head == null || head.getNext() == null){
? ? ? ? ? ? return head;
? ? ? ? }
? ? ? ? //前一個(gè)節(jié)點(diǎn)指針
? ? ? ? Node preNode = null;
? ? ? ? //當(dāng)前節(jié)點(diǎn)指針
? ? ? ? Node curNode = head;
? ? ? ? //下一個(gè)節(jié)點(diǎn)指針
? ? ? ? Node nextNode = null;
?
? ? ? ? while (curNode != null){
? ? ? ? ? ? nextNode = curNode.getNext();//nextNode 指向下一個(gè)節(jié)點(diǎn)
? ? ? ? ? ? curNode.setNext(preNode);//將當(dāng)前節(jié)點(diǎn)next域指向前一個(gè)節(jié)點(diǎn)
? ? ? ? ? ? preNode = curNode;//preNode 指針向后移動
? ? ? ? ? ? curNode = nextNode;//curNode指針向后移動
? ? ? ? }
?
? ? ? ? return preNode;
? ? }
————————————————
版權(quán)聲明:本文為CSDN博主「WeekenLin」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lwkrsa/article/details/82015364
總結(jié)
以上是生活随笔為你收集整理的Java实现单链表反转操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis cluster原理
- 下一篇: LRU算法及Java实现