思路:所謂反轉鍊錶就是指將這個鍊錶的所有指標方向反向。
採取的辦法是時刻保留連續的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 分析 這是一道廣為流傳的微軟面試題。由於這道題能夠很好的反應出程式設計師思維是否嚴密,在微軟之後已經有很多公司在面試時採用了這道題。為了正確地反轉乙個鍊錶,需要調整指標的指向。與指標操...