劍指offer05題鍊錶的倒序輸出

2021-06-20 20:31:51 字數 1630 閱讀 9032

題目:輸入鍊錶的頭結點,從尾到頭列印出所有結點的值。(倒序輸出鍊錶)

一般有兩種辦法,

一:利用棧的「後進先出」的特性,把鍊錶每個結點都放到棧裡面,然後再出棧輸出。

下面是實現**:

#include#include#includevoid initstack(stack* s);								/*初始化棧*/

void push(stack* s,int e); /*進棧*/

void pop(stack* s,int *e); /*出棧*/

int stackempty(stack *s); /*判斷是否空棧*/

void readlist_end(linklist l); /*主要處理函式,用於把鍊錶資料進棧,然後出棧*/

void echo_list(linklist l,int flag); /*用於輸出鍊錶資料*/

linklist creat_list(int len); /*建立鍊錶*/

typedef struct node

lnode,*linklist;

typedef struct stack

stack;

int stackempty(stack *s)

void initstack(stack *s)

void push(stack *s,int e)

void pop(stack *s,int *e)

void readlist_end(linklist l)

while(s.top!=null)

printf("\n");}/*

* linklist:鍊錶

* flag

* 1:釋放空間

* other:只輸出,不錯處理.

* */

void echo_list(linklist l,int flag)

} printf("\n");

}linklist creat_list(int len)

m->next=null;

return 0;

}int main()

二:利用遞迴特性進行輸出,先遞迴再輸出資料(收到遞迴層數影響,資料量太大就不行了,但是**簡單)

#include#include#include#includetypedef struct node

lnode,*linklist;

linklist creat_list(int len)

m->next=null;

return l;

}void readlist_end(linklist l)

/*linklist:the link table.

**flag

** 1:free the memery.

** other:not free the memery.

***/

void echo_list(linklist l,int flag)

} printf("\n");

}int main()

如果有哪地方不對,請及時幫我指出,免得誤導大家。

劍指offer 05 從尾到頭列印鍊錶

輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個節點的值。思路 使用遞迴或棧結構實現。基於遞迴的 看起來很簡潔,但有個問題 當鍊表非常長的時候,就會導致函式呼叫的層級很深,從而有可能導致函式呼叫棧溢位。顯式用棧基於迴圈的 的魯棒性要好一些。class node public node int data...

劍指offer05矩形覆蓋

題目描述 我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋乙個2n的大矩形,總共有多少種方法?比如n 3時,23的矩形塊有3種覆蓋方法 思路 一開始又矇圈了,看到長方形又是長又是寬覺得有些亂,雖然提示是遞迴但是就不知道該怎麼用了。仔細思考需要覆蓋的目標長方形的寬...

劍指 Offer 05 替換空格

劍指 offer 05.替換空格 請實現乙個函式,把字串 s 中的每個空格替換成 20 示例 1 方法一 遍歷新增 由於每次替換從 1 個字元變成 3 個字元,使用字元陣列可方便地進行替換。建立字元陣列地長度為 s 的長度的 3 倍,這樣可保證字元陣列可以容納所有替換後的字元。class solut...