1. 程式人生 > >單向連結串列反轉(倒置)問題

單向連結串列反轉(倒置)問題

今天遇到單向連結串列的反轉的問題,於是靜下心來好好想了一番。
解題思路如下圖:

假設當前建立好的連結串列如下:

這裡寫圖片描述

首先讓頭節點與第一個元素節點斷開,但是要注意在斷開之前需要用p指標指向第一個元素節點來儲存第一個元素節點的位置,然後再斷開。在這裡有一個指標q指向一個指標域為空的節點,這個節點用來做為連結串列反轉後的最後一個節點。

這裡寫圖片描述

讓第二個元素節點的指標從指向第三個元素節點變為指向第一個元素節點,以此類推,直至指標p指向原連結串列最後一個元素。

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

p指標指向NULL時,讓原頭節點的指標域指向原來最後一個元素節點。此時連結串列倒置已完成。

這裡寫圖片描述

程式碼如下:

linkList reverse(linkList head){
  linkList p,q,pr;
  p = head->next
; q = NULL; head->next = NULL; while(p){ pr = p->next; p->next = q; q = p; p = pr; } head->next = q; return head; }