??前面的話??
大家好!博主開辟了一個新的專欄——劍指offer,我要開始刷題了!這個專欄會介紹《劍指offer》書上所有的面試編程題,并且會分享一些我的刷題心得,由于博主水平有限,如有錯誤,歡迎指正,如果有更好的解題思路和演算法可以分享給博主哦!一起加油!一起努力!
📒博客主頁:未見花聞的博客主頁
🎉歡迎關注🔎點贊👍收藏??留言📝
📌本文由未見花聞原創,CSDN首發!
📆首發時間:🌴2021年9月3日🌴
??堅持和努力一定能換來詩與遠方!
💭參考書籍:📚《劍指offer第1版》,📚《劍指offer第2版》
💬參考在線編程網站:🌐牛客網🌐力扣
🙏作者水平很有限,如果發現錯誤,一定要及時告知作者哦!感謝感謝!
博主的碼云gitee,平常博主寫的程式代碼都在里面,
📌導航小助手📌
- ??劍指 Offer 06. 從尾到頭列印鏈表??
- 🔐題目詳情
- 💡解題思路
- 🔑源代碼
- 🌱總結
??劍指 Offer 06. 從尾到頭列印鏈表??
🔐題目詳情
輸入一個鏈表的頭節點,從尾到頭反過來回傳每個節點的值(用陣列回傳),
示例:
輸入:head = [1,3,2]
輸出:[2,3,1]
限制:
0 <= 鏈表長度 <= 10000
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/
💡解題思路
方法1: 先求鏈表長度,然后再將鏈表中的元素逆序存入陣列中,
時間復雜度: O(N)
方法2: 先反轉鏈表并求長度,在將反轉后的鏈表資料拷貝至陣列中,
反轉鏈表方法見劍指offer系列——劍指 Offer 24. 反轉鏈表(C語言)
時間復雜度: O(N)
🔑源代碼
編程語言:C語言
在線編程平臺:力扣
//方法1
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* reversePrint(struct ListNode* head, int* returnSize){
int cnt = 0;
struct ListNode* cur = NULL;
cur = head;
while(cur)
{
cnt++;
cur = cur->next;//求鏈表中元素個數
}
int* arr = (int*)malloc(sizeof(int)*cnt);//分配給陣列合適的空間
*returnSize = cnt;
cur = head;
while(cur)
{
*(arr + cnt - 1) = cur->val;//將鏈表的元素逆向存入陣列中
cur = cur->next;
cnt--;
}
return arr;
}
//方法2
int* reversePrint(struct ListNode* head, int* returnSize){
if (head == NULL)
{
*returnSize = 0;
return NULL;
}
int cnt = 0;//記錄元素個數
struct ListNode* cur = head;
struct ListNode* next = NULL;
struct ListNode* tail = NULL;
while (cur)
{
next = cur->next;
cur->next = tail;
tail = cur;
cur = next;
cnt++;
}//反轉鏈表并求鏈表長度
int* arr = (int*)malloc(sizeof(int)*cnt);
*returnSize = cnt;
cur = tail;
int i = 0;
for (i = 0; i < cnt; i++)
{
arr[i] = cur->val;
cur = cur->next;
}
return arr;
}
🌱總結
對于鏈表的逆序列印,可以先統計鏈表元素個數,然后根據鏈表元素個數創建合適大小的陣列,最后再將鏈表中的元素逆序存入陣列中!還可以先進行反轉鏈表并求出鏈表元素個數,同理根據鏈表大小為陣列申請空間,最后將反轉鏈表中的元素存入陣列中!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297287.html
標籤:其他
下一篇:打造Win10下完美Linux體驗(WSL2+WindowsTerminal+oh-my-zsh),完整圖文教程+解決方案(建議收藏)
