算法-链表篇03-反转链表
反转链表
力扣题目链接
题目描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
解题思路
首先定义链表节点指针pre和cur分别代表反转的前一个节点和当前反转节点,但是节点反转后,后一个节点会出现没有指向的情况,无法访问到,也就是发生了内存泄漏。所以,我们还需要一个next指针保存一下下一个节点的地址。然后循环遍历对整个链表进行反转操作。
题解
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head == nullptr || head->next == nullptr){
return head;
}
ListNode* pre = nullptr;
ListNode* cur = head;
ListNode* next;
while(cur != nullptr){
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
return pre;
}
};
总结
反转链表虽然原理上很简单,但是实际操作中很容易被各个节点给绕进去,所以需要严谨定义每个指针。在进行反转操作时也要防止每一步的顺序错误,这可能会导致意想不到的错误。