题解 | #反转链表#
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ #include <csignal> #include <cstddef> #include <cstdlib> #include <stack> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ ListNode* ReverseList(ListNode* head) { // write code here ListNode*phead=nullptr; if(head==nullptr || head->next==nullptr) { return head; } while(head) { ListNode*node=head; head=head->next; node->next=phead; phead=node; } return phead; } };
可以使用类似头插法的方式,如果使用栈进行翻转,也可以,这里不用反转,我们自己定义的链表通常只是一个节点,所以不能直接使用指向next的方式进行组建链表,我们创建一个零时的节点node用来存储值,当他获得值后,便可指向下一个节点,指向为空,然后赋值给phead,下一次循环,继续在phead前面插入,也就是头插法,phead的最后也指向了nullptr,防止回环