題目:輸入鍊錶的頭結點,從尾到頭列印出所有結點的值。(倒序輸出鍊錶)
一般有兩種辦法,
一:利用棧的「後進先出」的特性,把鍊錶每個結點都放到棧裡面,然後再出棧輸出。
下面是實現**:
#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...