6-1 單連結串列逆轉 (20point(s))(12行兩個指標解決)

橘與柚發表於2020-11-17

本題要求實現一個函式,將給定的單連結串列逆轉。

函式介面定義:

List Reverse( List L );

其中List結構定義如下:

typedef struct Node *PtrToNode;
struct Node {
    ElementType Data; /* 儲存結點資料 */
    PtrToNode   Next; /* 指向下一個結點的指標 */
};
typedef PtrToNode List; /* 定義單連結串列型別 */
L是給定單連結串列,函式Reverse要返回被逆轉後的連結串列。

裁判測試程式樣例:
#include <stdio.h>
#include <stdlib.h>

typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
    ElementType Data;
    PtrToNode   Next;
};
typedef PtrToNode List;

List Read(); /* 細節在此不表 */
void Print( List L ); /* 細節在此不表 */

List Reverse( List L );

int main()
{
    List L1, L2;
    L1 = Read();
    L2 = Reverse(L1);
    Print(L1);
    Print(L2);
    return 0;
}

/* 你的程式碼將被嵌在這裡 */
輸入樣例:

5
1 3 4 5 2

輸出樣例:

1
2 5 4 3 1
List Reverse( List L ){
    if(L == NULL)return L;   // 老規矩,空連結串列一般寫在前面
    List start = NULL;     // 思考了一會,發現還是得需要定義兩個指標變數
    while(L!= NULL && L->Next != NULL){     // 這裡的a是L->Next,所以加了個L->Next != NULL條件
        List a = L->Next;
        L->Next = start;
        start = L;
        L = a;
    }
    L->Next = start;      //最後一截連結串列,還沒有連上,補上它
    return L;
}

相關文章