面試題 反轉鍊錶並輸出頭結點

2021-10-09 06:30:14 字數 1095 閱讀 6997

定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。

示例:

輸入: 1->2->3->4->5->null

輸出: 5->4->3->2->1->null

建立兩個節點,前向與當前節點,前向節點初始化為none,當前節點初始化為頭節點;接著遍歷原鍊錶,將鍊錶的指標指向進行調換,直到遍歷完整個原鍊錶,指標順序調換完成。

# definition for singly-linked list.

# class listnode(object):

# def __init__(self, x):

# self.val = x

# self.next = none

class solution(object):

def reverselist(self, head):

""":type head: listnode

:rtype: listnode

"""if not head:

return

# 需要兩個指標同時移動來對每兩個節點之間的方向進行轉向處理

pre_node = none

cur_node = head

# 遍歷整個鍊錶

while cur_node:

# 因為要斷開當前節點跟下個節點的連線,這樣就無法通過next指標找到下個節點了

# 所以需要使用乙個臨時變數來儲存當前節點的下個節點

tmp = cur_node.next

# 斷開當前節點跟下個節點的連線,使其跟上個節點進行連線,這樣next的方向就改變了

cur_node.next = pre_node

# 同時移動兩個指標,以便進行下乙個節點的反向

面試題 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。鍊錶節點定義如下 struct listnode int m nkey listnode m pnext 思路 額,一路遍歷下去,前後指向反過來,最後乙個節點就輸出。o n 的效率也應該是最優的了。答案如下 listnode r...

面試題 反轉鍊錶

面試題 反轉鍊錶 思路 要實現鍊錶反轉,需要調整鍊錶中指標方向,使鍊錶反轉後的頭結點為原鍊錶的尾結點。為了防止結點斷裂,需定義三個指標,分別指向當前遍歷的結點,它的前一結點以及後乙個結點。當然編寫 時要考慮到下列三點 防止程式崩潰 將思路用 實現為 slistnode node phead 當前結點...

面試題 反轉鍊錶

題目 輸入乙個鍊錶的頭結點,反轉該鍊錶,並返回反轉後鍊錶的頭結點。如下 include iostream using namespace std struct node 返回反向鍊錶的頭結點 node reserve node head return pre int main 正向遍歷鍊錶 node...