題目描述:
輸入一個(gè)鏈表匹舞,反轉(zhuǎn)鏈表后,輸出新鏈表的表頭窟哺。
然后給到的是一個(gè)輸入pHead指針
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
整體思路是創(chuàng)造三個(gè)指針來(lái)進(jìn)行反轉(zhuǎn)鏈表操作
通過(guò)將鏈表不斷進(jìn)行遍歷切割涛菠,并將新切割下的節(jié)點(diǎn)指向已切割下來(lái)的反轉(zhuǎn)鏈表頭指針指向的節(jié)點(diǎn),以此來(lái)完成操作疙渣。
一個(gè)cur指針始終指向當(dāng)前情況下的表頭匙奴,一個(gè)tmp指針指向當(dāng)前鏈表頭指針指向的下一個(gè)節(jié)點(diǎn),防止鏈表丟失昌阿,一個(gè)pre指針用來(lái)將下一個(gè)節(jié)點(diǎn)指向上一個(gè)節(jié)點(diǎn)的關(guān)鍵指針饥脑,通過(guò)pre指針使其始終指向反轉(zhuǎn)鏈表的頭部。并最終返回pre
過(guò)程如下:
cur->1->2->3->4
cur->1,tmp->2->3->4
cur->1,pre tmp->2->3->4
1<-pre cur,tmp->2->3->4
1<-pre cur->2,tmp->3->4
1<-pre,2<-cur tmp->3->4
1<- 2<-pre cur,tmp->3->4
1<- 2<-pre cur->3,tmp->4
1<- 2<-pre,3<-cur tmp->4
1<- 2<-3<-pre cur,tmp->4
1<- 2<-3<-pre cur->4,tmp
1<- 2<-3<-pre,4<-cur tmp
1<- 2<-3<-4<-pre cur tmp
代碼:
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
# 初始化三個(gè)指針來(lái)構(gòu)建反轉(zhuǎn)鏈表懦冰,通過(guò)遍歷鏈表灶轰,并不斷把
# 第一個(gè)指針是pre指針,用來(lái)將下一個(gè)節(jié)點(diǎn)指向上一個(gè)節(jié)點(diǎn)的關(guān)鍵指針
# 第二個(gè)指針是cur指針刷钢,用來(lái)指向當(dāng)前鏈表的指針
# 第三個(gè)指針是nxt指針笋颤,指向當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)用于與cur配合保存當(dāng)前鏈表
if pHead==None or pHead.next==None:
return pHead
pre = None
tmp = None
cur = pHead
while cur != None:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
return pre