leetcode 206 反转链表
题意:
给一个单链表的头节点 head,要求反转链表,并返回反转后的链表。
分析:
首先注意到是单链表,所以只有一个 next 指针,没有 prev 指针。而且本题并没有要求不能改变原链表,所以可以将原链表的 next 指针指向下一个节点即可。
这道题的注意点有:
有三种节点,prev 表示前一个节点,curr 表示当前节点,next 表示下一个节点。移动的时候,每次把 prev 和 curr 往后移动即可,next 可以在下一次通过 curr->next 指针获得。
循环的时候,判断 curr 是否为空即可,不空就可以继续往后遍历。
翻转的时候,把 curr->next 指向前一个即可,当然最前面的 prev 要初始化为 nullptr。
解答如下:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* curr = head;
while (curr != nullptr) {
ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
};
评论