編程筆試題※python實現※鏈表類

1.從尾到頭打印鏈表(劍指offer第6題)
輸入一個鏈表,按鏈表從尾到頭的順序返回一個ArrayList。
思路:遍歷鏈表存儲在棧裏面,然後依次從棧中取出。

stack=[]
p=listNode
while p:
        stack.append(p.val)
        p=p.next
stack.reverse()
return stack

2.兩個鏈表的第一個公共節點(劍指offer52題)
輸入兩個鏈表,找出它們的第一個公共結點。
思路:第一個公共節點也就意味着兩個鏈表後續的節點都相同。首先遍歷一遍鏈表,得到兩個鏈表的長度。計算長度的差值,讓長度大的鏈表先走,差值的步長,走完以後再開始一起遍歷節點,直到出現第一個節點相同。

p1=pHead1
p2=pHead2
len1=len2=0
while p1:
    len1+=1
    p1=p1.next
while p2:
    len2+=1
    p2=p2.next
if len1<len2:
    pHead1,pHead2=pHead2,pHead1
n=abs(len1-len2)
#讓長的鏈表先走len2-len1步
for i in range(n):
    pHead1=pHead1.next
#長短鏈表一起走,直到節點相同
while pHead1!=pHead2:
    pHead1 = pHead1.next
    pHead2 = pHead2.next
return pHead1

3.鏈表中倒數第k個節點(劍指offer22題)
輸入一個鏈表,輸出該鏈表中倒數第k個節點。例如,一個鏈表有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個鏈表的倒數第3個節點是值爲4的節點。
思路:雙指針,先讓第一個指針走K-1步,然後兩個指針同步走。直到第一個指針到達鏈表尾部。

p1=head
for i in range(k):
    p1=p1.next
p2=head
while p1:
    p1=p1.next
    p2=p2.next
print(p2)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章