反转链表

题目

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

思路

双指针法,前后一个指针,但是要注意这里由于链表的下一个节点是需要前一个节点才能找到他的位置,所以需要一个指针来记录fast指针的下一个节点

代码

//这个题目用双指针比较方便,但是一下子很难想到,多看

struct ListNode{
    int val;
    ListNode* next;
    ListNode(int val):val(val),next(nullptr){}
    ListNode(int val,ListNode* next):val(val),next(next){}
};
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* temp;
        ListNode* slow = NULL;
        ListNode* fast = head;
        while(fast){
            temp = fast->next;
            fast->next = slow;
            slow = fast;
            fast = temp;
        }
        return slow;
    }
};
posted @ 2023-03-01 17:53  铜锣湾陈昊男  阅读(4)  评论(0)    收藏  举报