單鏈表反轉(zhuǎn)

單鏈表反轉(zhuǎn)(java版本)

  • 第一種方法
    • 第一步踱葛,判斷節(jié)點是否為空捌锭,節(jié)點是否只有一個
    • 第二步殃饿,設置currentNode記錄為當前結(jié)點饮寞,secondNode記錄下一個節(jié)點孝扛。當前節(jié)點指向為null
    • 第三步,用第三方temp變量將secondNode指向的節(jié)點值保存起來幽崩。將secondNode節(jié)點指向currentNode苦始。重置currentNode為secondNode,重置secondNode為temp。循環(huán)判斷secondNode是否為null
    • 第四步慌申,返回currentNode陌选,即最后一個節(jié)點
private static Node reverseMethodOne(Node node) {
        // 順序依次一個一個反轉(zhuǎn)理郑,設置變量temp記錄變量
        if (node == null)
            return null;
        Node currentNode = node;
        Node secondNode = currentNode.getNext();
        currentNode.setNext(null);
        while (secondNode != null) {
            Node temp = secondNode.getNext();
            secondNode.setNext(currentNode);
            currentNode = secondNode;
            secondNode = temp;
        }
        return currentNode;
    }
  • 第二種方法
    • 第一步,判斷節(jié)點是否為空咨油,節(jié)點是否只有一個
    • 第二步您炉,遞歸遍歷,獲取到最后一個節(jié)點役电,依次遞歸回去
    • 第三步赚爵,將當前節(jié)點的下一個節(jié)點指向自己,并將當前結(jié)點指向為null
    • methodTwo 和methodThree相似法瑟。
private static Node reverseMethodTwo(Node node) {
        // 遞歸遍歷鏈表冀膝。知道找到最后一個節(jié)點,并設置其為反轉(zhuǎn)后的新節(jié)點霎挟,不斷遞歸回傳窝剖。
        if (node == null)
            return null;
        if (node.getNext() == null)
            return node;
        Node secondNode = node.getNext();
        node.setNext(null);
        Node reverseHead = reverseMethodTwo(secondNode);
        secondNode.setNext(node);
        return reverseHead;
    }

    private static Node reverseMethodThree(Node node) {
        // 遞歸,區(qū)別于方法2
        if (node == null)
            return null;
        if (node.getNext() == null)
            return node;
        Node reverseNode = reverseMethodThree(node.getNext());
        node.getNext().setNext(node);
        node.setNext(null);
        return reverseNode;
    }

完整代碼

public class N05 {

    /**
     * 鏈表反轉(zhuǎn)
     */
    public static void main(String[] args) {
        Node node1 = new Node("A");
        Node node2 = new Node("B");
        Node node3 = new Node("C");
        Node node4 = new Node("D");
        Node node5 = new Node("E");
        node1.setNext(node2);
        node2.setNext(node3);
        node3.setNext(node4);
        node4.setNext(node5);
        Node newNode = reverseMethodOne(node1);
        print(newNode);
        Node node = reverseMethodThree(newNode);
        print(node);
    }

    private static Node reverseMethodOne(Node node) {
        // 順序依次一個一個反轉(zhuǎn)酥夭,設置變量temp記錄變量
        if (node == null)
            return null;
        Node currentNode = node;
        Node secondNode = currentNode.getNext();
        currentNode.setNext(null);
        while (secondNode != null) {
            Node temp = secondNode.getNext();
            secondNode.setNext(currentNode);
            currentNode = secondNode;
            secondNode = temp;
        }
        return currentNode;
    }

    private static Node reverseMethodTwo(Node node) {
        // 遞歸遍歷鏈表赐纱。知道找到最后一個節(jié)點,并設置其為反轉(zhuǎn)后的新節(jié)點熬北,不斷遞歸回傳疙描。
        if (node == null)
            return null;
        if (node.getNext() == null)
            return node;
        Node secondNode = node.getNext();
        node.setNext(null);
        Node reverseHead = reverseMethodTwo(secondNode);
        secondNode.setNext(node);
        return reverseHead;
    }

    private static Node reverseMethodThree(Node node) {
        // 遞歸,區(qū)別于方法2
        if (node == null)
            return null;
        if (node.getNext() == null)
            return node;
        Node reverseNode = reverseMethodThree(node.getNext());
        node.getNext().setNext(node);
        node.setNext(null);
        return reverseNode;
    }

    private static void print(Node newNode) {
        while (newNode != null) {
            System.out.print(newNode.data + " ");
            newNode = newNode.getNext();
        }
        System.out.println();
    }

}

class Node {
    String data;
    Node next;

    public Node(String data) {
        super();
        this.data = data;
    }

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

    public String getData() {
        return data;
    }

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

    public Node getNext() {
        return next;
    }

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

}

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蒜埋,一起剝皮案震驚了整個濱河市淫痰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌整份,老刑警劉巖待错,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異烈评,居然都是意外死亡火俄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門讲冠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓜客,“玉大人,你說我怎么就攤上這事竿开∑滓牵” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵否彩,是天一觀的道長疯攒。 經(jīng)常有香客問我,道長列荔,這世上最難降的妖魔是什么敬尺? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任枚尼,我火速辦了婚禮,結(jié)果婚禮上砂吞,老公的妹妹穿的比我還像新娘署恍。我一直安慰自己,他們只是感情好蜻直,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布盯质。 她就那樣靜靜地躺著,像睡著了一般概而。 火紅的嫁衣襯著肌膚如雪唤殴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天到腥,我揣著相機與錄音,去河邊找鬼蔚袍。 笑死乡范,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的啤咽。 我是一名探鬼主播晋辆,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宇整!你這毒婦竟也來了瓶佳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鳞青,失蹤者是張志新(化名)和其女友劉穎霸饲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臂拓,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡厚脉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了胶惰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傻工。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖孵滞,靈堂內(nèi)的尸體忽然破棺而出中捆,到底是詐尸還是另有隱情,我是刑警寧澤坊饶,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布泄伪,位于F島的核電站,受9級特大地震影響幼东,放射性物質(zhì)發(fā)生泄漏臂容。R本人自食惡果不足惜科雳,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脓杉。 院中可真熱鬧糟秘,春花似錦、人聲如沸球散。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蕉堰。三九已至凌净,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屋讶,已是汗流浹背冰寻。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留皿渗,地道東北人斩芭。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像乐疆,于是被迫代替她去往敵國和親划乖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 【聲明】歡迎轉(zhuǎn)載挤土,但請保留文章原始出處→_→文章來源:http://www.reibang.com/p/08d08...
    夢工廠閱讀 3,762評論 3 31
  • 最近與人瞎聊琴庵,聊到各大廠的面試題,其中有一個就是用java實現(xiàn)單鏈表反轉(zhuǎn)仰美。閑來無事迷殿,決定就這個問題進行一番嘗試。 ...
    冬天里的懶喵閱讀 4,107評論 1 14
  • 單鏈表的反轉(zhuǎn)是一道很基本的算法題咖杂,一般可以想到以下三種方法: 方法1:將單鏈表儲存為數(shù)組贪庙,然后按照數(shù)組的索引逆序進...
    vincentgemini閱讀 213評論 0 0
  • 單鏈表反轉(zhuǎn)使用p、q翰苫、r三個指針配合工作止邮,使得兩個節(jié)點間的指向反向,同時用r記錄剩下的鏈表奏窑〉寂基本流程如下圖所示: ...
    kMacro閱讀 1,945評論 0 7
  • 基本問題 如何將單鏈表反轉(zhuǎn)? 單鏈表結(jié)構(gòu)定義 算法實現(xiàn) 進階問題 如何將單鏈表在指定區(qū)間內(nèi)進行反轉(zhuǎn)埃唯? 問題分析 這...
    craneyuan閱讀 476評論 0 5