写在前面:
牛客网剑指offer的日记文。算法总结是参考牛客网评论后自己的理解与整理。萌新会尽量著明引用出处,侵权必删。
题目描述:
输入一个链表,从尾到头打印链表每个节点的值。
题目分析:
反转链表。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> v;
ListNode* p = head, *pre, *hail = NULL;
while(p){
pre = p;
p = p->next;
pre->next = hail;
hail = pre;
}
p = hail;
while(p){
v.push_back(p->val);
p = p->next;
}
return v;
}
};
总结:反转链表:
非递归版:
ListNode* reverseList(ListNode *head){
ListNode* p = head, *temp, *newHead = NULL;
while(p){
temp = p;
p = p->next;
temp->next = newHead;
newHead = temp;
}
return newHead;
}
递归版:
ListNode* reverseList(ListNode * head){
if(!head || !head->next) return head;
ListNode* newHead = reverseList(head->next);
head->next->next = head;
head->next = NULL;
return newHead;
}
转载:https://blog.csdn.net/fx677588/article/details/72357389