题解 | #反转链表#

反转链表

https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* ReverseList(ListNode* head) {
        // write code here
        if (head->next==nullptr||head==nullptr) {
            return head;
        }
        
        ListNode* now=head->next;
        ListNode* pre=head;
        ListNode* back=head->next->next;
        head->next = nullptr;
        while (now != NULL) {
            back = now->next;
            now->next = pre;
            pre = now;
            now = back;
        }
        return pre;
    }
};

遍历链表,并保存链表的前一个节点和后一个节点。每次循环断开当前节点和后一节点连线,使其指向前一节点。

注意要把反转后的尾部节点的next置为空nullptr,否则会成为循环

全部评论

相关推荐

头像
09-05 10:14
已编辑
门头沟学院 Java
赫一鸣:我昨天投的,今天就oc了,也没和我说要面试笔试啊?不说了这单要超时了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务