PTA 6-1 單鏈表逆轉

本題是一個非常經典的題目:單鏈表逆轉。

這是鏈表結點的定義:

typedef struct Node *PtrToNode;
struct Node {
    ElementType Data; /* 存儲結點數據 */
    PtrToNode   Next; /* 指向下一個結點的指針 */
};
typedef PtrToNode List; /* 定義單鏈表類型 */

先給出實現的代碼:

List Reverse( List L )
{
    List before = NULL, head = L, next;
    while(head != NULL)
    {
        next = head->Next;      // 記錄當前值的下一個值
        head->Next = before;    // 修改當前結點的下一個爲上個結點
        before = head;          // 上一個結點修改爲本結點
        head = next;            // 當前結點爲下一個結點
    }
    return before;
};

代碼的思想很簡單,就是我們需要將每個結點的指針改變過來。

當我們從前往後將當前結點的指針指向前一個的時候,我們不可避免的就需要至少三個指針:

  1. 之前結點的指針
  2. 當前結點的指針
  3. 下一個結點的指針

注意在這個過程中,我們如果修改了當前結點指向的下一個結點的位置,那麼我們必然就找不到之前這個結點的下一個結點。

所以我們需要保存下一個結點,以免修改當前結點指向的下一個指針之後找不到下一個結點的位置了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章