鍊錶的反轉問題

2021-08-03 08:30:36 字數 789 閱讀 9899

思路:所謂反轉鍊錶就是指將這個鍊錶的所有指標方向反向。

採取的辦法是時刻保留連續的3個結點,ppre/pcur/pnext;

修改指標方向:將pcur.next設定為ppre;

然後修改ppre/pcur/pnext向前推進即可

ppre=pcur;

pcur=pnext;

pnext=pnext.next;

需要注意的是:

1.          輸入的鍊錶head==null;

2.          輸入的鍊錶只有乙個結點,直接返回head

3.          當pnext==null時,就要停止,因為此時pnext.next是非法的,空指標異常,應該停止然後手動完成最後一次指標反向pcur.next設定為ppre。

/*struct listnode

};*/

//所謂反轉鍊錶即將整個鍊錶的指標反向,所謂輸出鍊錶的所有元素即為輸出鍊錶的頭結點

publicclass solution

listnode pnext=head.next;  

if(pnext==null)

while(pnext!=null)

pcur.next=ppre;

return pcur;}}

需要注意的是ppre一開始是null,這是因為第乙個節點的前乙個節點就是空。並且在反轉之後原本是第乙個節點的下乙個節點就是空。

對於這個演算法來說,還可以使用棧來實現,雖然使用棧比上面的演算法要簡單,但是需要額外的空間,空間複雜度為o(n)。而上面的空間複雜度為o(1)。

LeetCode 反轉鍊錶(鍊錶問題)

難度 簡單 反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null使用三個listnode,分別是prev,curr,next。curr是當前指標指向的節點,prev是curr的前乙個節點,頭節點的前乙個節點是null,next是curr的下乙個節點,用於遍歷鍊...

反轉鍊錶的各種問題

這道題,使用 迭代來做的話比較好理解一些,迭代法 class solution return newtemp 當然使用 遞迴法 會利於後續 反轉鍊錶的plus題 遞迴法 class solution 反轉鍊錶的前n個節點 遞迴法 class solution listnode last revers...

鍊錶反轉問題收集

題目 輸入乙個鍊錶的頭結點,反轉該鍊錶,並返回反轉後鍊錶的頭結點。鍊錶結點定義如下 struct listnode 分析 這是一道廣為流傳的微軟面試題。由於這道題能夠很好的反應出程式設計師思維是否嚴密,在微軟之後已經有很多公司在面試時採用了這道題。為了正確地反轉乙個鍊錶,需要調整指標的指向。與指標操...