反转链表

本文介绍了一道经典的链表操作题目——链表反转。通过详细的代码解析,展示了如何利用C++实现链表的反转,并附带了解决方案的具体步骤。对于理解链表的数据结构及其基本操作具有很好的指导意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

剑指offer面试题16

题目描述
输入一个链表,反转链表后,输出链表的所有元素。

分析:
头结点存储数据。

已知链表:
这里写图片描述

pReverseHead为最终反转后的链表头指针:
注意要给pReverseHead->next设置为NULL,否则pReverseHead后面等于pHead所含结点
这里写图片描述

改变指针指向的具体操作:
这里写图片描述

第一次改变指针指向后:
这里写图片描述

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        //头指针为NULL 或者 链表为空
        if(pHead == NULL || pHead->next == NULL)
        {
            return pHead;
        }

        ListNode *p = pHead->next;
        ListNode *p1 = NULL;

        ListNode *pReversHead = pHead;
        pReversHead->next = NULL;

        while(p != NULL)
        {
            p1 = p->next;
            p->next = pReversHead;  
            pReversHead = p;
            p = p1;
        }
        return pReversHead;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值