《剑指Offer》之反转链表并返回头指针

本文介绍了一种链表反转的方法,并提供了完整的C++实现代码。该算法通过迭代方式将原链表节点依次反转链接,最终返回新的头指针。示例代码展示了如何创建链表及输出反转后的链表元素。

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

描述:
输入一个链表,反转这个链表,并输出反转后链表的头指针;

注:本核心代码都是在牛客网在线编程中进行测试通过,并且在VS2015上进行编译通过;

代码如下所示:

#include<iostream>
#include<vector>

using namespace std;


struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};


class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {

        if (pHead == NULL) return NULL;
        ListNode* preNode = NULL;
        ListNode* Node = pHead;
        ListNode* ReverseNode = NULL;
        while (Node!=NULL) {
            ListNode* PNext = Node->next;
            if (PNext == NULL)
                ReverseNode = Node;
            Node->next = preNode;
            preNode = Node;
            Node = PNext;
        }
        return ReverseNode;
    }
};
int main(int argc,char** argv) {
    Solution test_;
    ListNode test(12);
    ListNode test1(88);
    ListNode test12(192);
    ListNode test13(162);
    ListNode test14(1142);
    test.next = &test1;
    test1.next = &test12;
    test12.next = &test13;
    test13.next = &test14;
    ListNode* NewHead = test_.ReverseList(&test);
    while (NewHead!=NULL)
    {
        cout << (*NewHead).val << endl;
        NewHead = NewHead->next;
    }
    system("pause");
    return 0;
}

结果如下所示:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值