hihoCoder——翻轉(zhuǎn)鏈表(Java語(yǔ)言實(shí)現(xiàn)單鏈表基礎(chǔ)算法)

描述
翻轉(zhuǎn)一個(gè)鏈表
特殊要求:請(qǐng)使用以下鏈表結(jié)構(gòu)
class Node
{
int value;
Node next;
}
輸入
輸入包含多組數(shù)據(jù)。對(duì)于每組數(shù)據(jù):
第一行是n,表示鏈表長(zhǎng)度;當(dāng)n=-1時(shí),表示輸入結(jié)束。(1 <= n <= 100)
第二行是n個(gè)整數(shù),表示鏈表每一位所存儲(chǔ)的內(nèi)容。
輸出
針對(duì)每組輸入,輸出翻轉(zhuǎn)后的鏈表的內(nèi)容。
樣例輸入
4
1 3 5 7
-1
樣例輸出
7 5 3 1

思路:?jiǎn)捂湵淼姆D(zhuǎn),三指針遍歷鏈表,每次逆置前兩個(gè)節(jié)點(diǎn),直到第二個(gè)節(jié)點(diǎn)為空,最后處理頭尾
為什么要用三個(gè)指針?由于單鏈表只有后繼指針,為了遍歷整個(gè)鏈表必須在逆置節(jié)點(diǎn)前復(fù)制后一個(gè)節(jié)點(diǎn),否則將丟失后續(xù)鏈表------
具體操作的注釋在源碼里參考
**
Java代碼參考

import java.util.Scanner;

public class ReverseSingleList {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        Node head = new Node(0);// 啞元
        Node p = head;
        while (true) {
            n = sc.nextInt();
            p.next = new Node(n);
            p = p.next;
            if (n == -1)
                break;
        }
        Node ans = reverseList(head);
        printList(ans);

    }

    private static Node reverseList(Node head) {
        Node p1 = head.next;
        Node p2 = p1.next;
        Node p3 = p2.next;

        if (p2.value == -1) {// 只有一個(gè)節(jié)點(diǎn),題目已知最少含有一個(gè)結(jié)點(diǎn)
            System.out.println(p1.value);
            System.exit(0);
        }

        while (p2.value != -1) {// 為了p3指針不指向空,申請(qǐng)額外一個(gè)結(jié)點(diǎn)-1代指尾結(jié)點(diǎn)
            if (p1 == head.next) {// 恰好為第一個(gè)節(jié)點(diǎn)的處理,next懸空
                p1.next = null;
            }
            p2.next = p1;// 前兩個(gè)節(jié)點(diǎn)的翻轉(zhuǎn)
            // 三個(gè)指針向后移動(dòng)
            p1 = p2;
            p2 = p3;
            p3 = p3.next;

        }
        head.next = p1;

        return head;

    }

    private static void printList(Node head) {
        Node p = head.next;
        while (p != null) {
            if(p.next == null)
                System.out.print(p.value);
            else
                System.out.print(p.value + " ");
            p = p.next;
        }

    }
    
    private static class Node {
        int value;
        Node next;

        public Node(int value) {
            super();
            this.value = value;
        }

    }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容