输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2] 输出:[2,3,1] 思路:递归到链表最后一个节点,从尾往前打印。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
vector<int> vi;
vector<int> reversePrint(ListNode* head) {
if(head == NULL) return{};
reversePrint(head->next);
vi.push_back(head->val);
return vi;
}
};
//或者
typedef struct Node{
int data;
Node* next;
}Node;
Node * creatNodeList(int in_NodeNum, Node* head){
if (in_NodeNum <= 0 || head == nullptr) return nullptr;
Node* pre = head;
while(in_NodeNum > 0){
Node* temp = malloc(sizeof(Node));
temp->data = in_NodeNum;
temp->next = nullptr;
//为循环做准备
pre->next = temp;// 上一个节点的next 指向这个新建立的节点
pre = temp; pre节点后移,这个新的节点作为新一轮的pre节点
in_NodeNum--;
}
return head;
}
void reversePrintf(Node* pNode){
if(pNode == nullptr) return;
// printf(" pre data: %d\n", pNode->data);
reversePrintf(pNode->next);
printf(" reverse data: %d\n", pNode->data);
return;
}
int main(int argc, char** argv){
Node* head = malloc(sizeof(Node));
head->data = 5;
reversePrintf(creatNodeList(4, head));
}