1. 程式人生 > 實用技巧 >《劍指offer》面試題11:反轉連結串列

《劍指offer》面試題11:反轉連結串列

題目描述

輸入一個連結串列,反轉連結串列後,輸出新連結串列的表頭。

題目解析:

這個題目的題意其實非常簡單,最開始我們的連結串列的指向是這樣的:

將其改變反向,變成如下所示的方向即可:

可以看到最開始我們的表頭指向了None,然後表尾卻指向了倒數第二個連結串列,中間的連結串列指向全部反向,這也就是這個題目要讓我們乾的事情。那麼我們如何實現這個連結串列的反轉呢?

首先我們開闢出一個新的空間nextNode,用於裝載還沒有實現連結串列反轉的部分,剩餘的空間preNode用於裝載已經反轉的部分,程式碼如下所示:

class Solution:
    # 返回ListNode,到底要讓我返回啥?返回的是新連結串列的表頭,這個連結串列當中的所有指向已經全部重新排列。
def ReverseList(self, pHead): # write code here、 preNode=None while pHead: nextNode = pHead.next#指向下一個記憶體空間 pHead.next = preNode#更換指標的指向為前一個記憶體空間 preNode=pHead#把當前節點從None變成pHead, pHead=nextNode return preNode

假設我們在做第一步的時候如下圖所示:

我們先拿掉phead當中的表頭,將其指向preNode也就是None,這樣拿掉的這個表頭以及已經具備新的指向的表頭用preNode來儲存,剩下的nextNode變成新的phead,進入到下一步重新進行這個迴圈。新的迴圈依然拿掉新的phead的表頭將其變換指向後灌入preNode當中,從此往復,就會將整個連結串列的指向全部反轉了。如下圖所示: