题目链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/
题意:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
方法一:迭代双指针
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* cur = head,*pre = NULL;//当前节点初始化指向头节点,前置节点指向空节点
while(cur!=NULL)//当前节点不为空时
{
ListNode* tmp = cur->next;//暂存当前节点的下一节点
cur->next = pre;//当前节点的next指针指向前置节点
pre = cur;//前置节点指向当前节点
cur = tmp;//更新当前节点
}
return pre;//返回前置节点
}
};
方法二:递归
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
private:
ListNode* rever(ListNode* cur,ListNode* pre)
{
if(!cur) return pre;//边界条件,假如当前节点为空,返回前置接点
ListNode* res = rever(cur->next,cur);//遍历当前节点的next值,前置节点变为当前节点
cur->next = pre;//修改节点引用方向
return res;//返回结果
}
public:
ListNode* reverseList(ListNode* head) {
return rever(head,nullptr);//返回前置节点
}
};