06從尾到頭列印連結串列
阿新 • • 發佈:2020-07-20
題目描述:
輸入一個連結串列的頭節點,從尾到頭反過來返回每個節點的值(用陣列返回)。
示例 1:
輸入:head = [1,3,2]
輸出:[2,3,1]
想用棧的方法來實現,可是我目前還沒有做很多棧的題,水平有限
以下是我寫的錯誤的棧的程式碼:
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * Note: The returned array must be malloced, assume caller calls free(). */ struct stack { int val; struct ListNode *top; }; int* reversePrint(struct ListNode* head, int* returnSize){ //如果能用棧來解決的話 會容易很多 int stack[1000000]; struct ListNode *p=head; while(p!=NULL) { stack.push(p->val); p=p->next; } while(stack!=empty) { stack[i]=stack.pop(stack.top()); stack.pop(); } return stack; }
以下是老古董方法,利用陣列來輔助實現反轉輸出
/** * 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){ //如果能用棧來解決的話 會容易很多 struct ListNode *p=head; int *a=(int *)malloc(sizeof(int)*10000); int n=0;//計算出連結串列大小 while(p!=NULL) { n++; p=p->next; } *returnSize=n; p=head; while(n--) { a[n]=p->val; p=p->next; } return a; }
反思;
這個方法並不算是一個優秀的方法,我希望後面做到棧的時候能在回頭把這道題重新做一下