题解 | #反转链表#
反转链表
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,防止回环
