#include <stdio.h> typedef struct node { int val; node* next; }; node* reverse(node* li ...
最近在做筆試題時,遇到一道編程題:單向鏈表反轉算法。一時緊張,沒寫出來就提前交卷了,然而交完卷就想出來了。。。 最初想出來的是遞歸版,遺憾的是沒能做到尾遞歸,后來又琢磨出了迭代版。后來用實際編譯運行測試了一遍,能正常運行。 遞歸版的靈感來源於 Haskell 趣學指南 中非常簡潔的快速排序算法的實現,其思想是將單向鏈表分割頭部和尾部。其中頭部指是鏈表的第一個節點,尾部是指除去第一個節點后的子鏈表 ...
2017-04-17 07:38 1 11022 推薦指數:
#include <stdio.h> typedef struct node { int val; node* next; }; node* reverse(node* li ...
最近在看鏈表,今天刷到一道鏈表的反轉題,鏈表反轉可以說是基礎操作,但是可提供的方案也有很多,簡單通過了該題后又學習了一下遞歸反轉,現在把三種方法都公開出來做一個總結。 1.就地逆置 2.單參數的遞歸逆置 3.雙參數的遞歸逆置 一、就地逆置 方法:頭插。 由於這里是不帶表頭結點的單向鏈表 ...
最近在 LeetCode 上面玩 鏈表 類型的題目,所以打算寫一篇文章,分享一下在做鏈表類型題目的心得。 眾所周知,玩鏈表就是玩指針,今天跟大家講解一個鏈表的入門題目,如何反轉一個單向鏈表 也是 LeetCode #206 是很熱門的一道編程題 LC#206 Reverse Linked ...
如果不要求“原地”,正向遍歷原鏈表,頭插法建立一個新的單向鏈表,它就是原鏈表的逆序。 下面利用遞歸的方法將單向鏈表原地逆序。 可以很容易地把遞歸改寫成非遞歸的形式。 NODE* inverse(NODE *head){ if(head==NULL) return ...
這次介紹經常在面試中被問到的單向鏈表的反轉問題,問題的解決方法有多種 最普通的是從頭到尾掃描鏈表,然后對鏈表進行反轉。 使用單個參數的遞歸方法;使用單個參數是相當於不斷的往鏈表后部深入,並且在每次深入的遞歸中保存了下一個節點和當前節點的信息,再調用遞歸后處理當前節點和下一個節點的關系 ...
單向鏈表反轉的方法有很多,其中用的比較多的是迭代法和遞歸法,迭代法通俗易懂,遞歸法相對來說比較難理解一些。 最近讀了一些網上的文章對這兩種算法的解釋后,有些自己的理解分享出來供大家參考。 單向鏈表反轉圖示: 一、迭代法 迭代法的解題思路是:通過循環遍歷的方式,使鏈表的每一個節點 ...
單向鏈表反轉,一道常見的面試題,動手實現下。 原理就是把cur節點的next節點保存,把next指向pre節點,把之前保存的next節點賦給cur,不斷循環直到next節點為NULL。注意下,退出循環后要把cur節點next指向pre節點。把cur節點返回,大功告成。 如果不用 ...
[本文出自天外歸雲的博客園] 鏈表是由節點構成的,一個指針代表一個方向,如果一個構成鏈表的節點都只包含一個指針,那么這個鏈表就是單向鏈表。 單向鏈表中的節點不光有代表方向的指針變量,也有值變量。所以我們定義鏈表,就是要定義鏈表中的節點,對鏈表的操作最后也就是對節點的操作。 這些包含數據的節點 ...