赞
踩
206. 反转链表https://leetcode-cn.com/problems/reverse-linked-list/
难度简单
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2] 输出:[2,1]
示例 3:
输入:head = [] 输出:[]
提示:
[0, 5000]
-5000 <= Node.val <= 5000
题解
- class Solution {
- public:
- ListNode* reverseList(ListNode* head) {
- ListNode*cur=head;//保存当前节点
- ListNode*temp;//保存下一个节点
- ListNode*pre=NULL;
- while(cur){
- temp=cur->next;
- cur->next=pre;
- pre=cur;
- cur= temp;
- }
- return pre;
- }
快慢指针法 即设置两个指针 pre始终在cur之前 然后一次次的移动 直到cur为空 画个图很好理解
- class Solution {
- public:
- ListNode* reverse(ListNode* pre,ListNode* cur){
- if(cur == NULL) return pre;
- ListNode* temp = cur->next;
- cur->next = pre;
- // 可以和双指针法的代码进行对比,如下递归的写法,其实就是做了这两步
- // pre = cur;
- // cur = temp;
- return reverse(cur,temp);
- }
- ListNode* reverseList(ListNode* head) {
- // 和双指针法初始化是一样的逻辑
- // ListNode* cur = head;
- // ListNode* pre = NULL;
- return reverse(NULL, head);
- }
-
- };
递归法 好理解却不好写 虽然是相同的思路
总结:这道题并不是很难 还是见得少了 涉及数组和链表的移动都可以想想快慢指针法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。