链表反转 -- 剑指Offer C++ Class

Java 源码解读
Java 集合类源码,JUC 源码解读
wangxiaoming


链表反转 -- 剑指Offer  C++ Class


题目描述

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

不多说看代码:


#include<iostream>
using namespace std;

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

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        /**
            A->B->C->D
            A
            A->NULL  prev A
            B->A prev = B
            C->B prev = C
            D  reverseHead = D
        **/
        ListNode* reverseHead = NULL; // 需要预先定义一个节点
        ListNode* pNode = pHead; //原先节点
        ListNode* pPrev = NULL;  //原先节点
        while(pNode != NULL){
            ListNode* pNext =pNode->next; // 原先下一个节点
            if(pNext == NULL){
                reverseHead = pNode;  //如果原先下一个节点是空,那么这个就是新链表的节点
            }
            pNode->next = pPrev;   //新链表的下一个节点就是之前节点
            pPrev = pNode;
            pNode = pNext;
        }
        return reverseHead;

    }
};
int main(){

    ListNode* n1 = new ListNode(1);
    ListNode* n2 = new ListNode(2);
    ListNode* n3 = new ListNode(3);
    ListNode* n4 = new ListNode(4);
    ListNode* n5 = new ListNode(5);
    ListNode* n6 = new ListNode(6);
    n1->next= n2;
    n2->next = n3;
    n3->next = n4;
    n4->next = n5;
    n5->next = n6;
    n6->next = NULL;

    Solution S;
    ListNode *head = S.ReverseList(n1);

    while(head != NULL){
        cout<<head->val<<endl;
        head = head->next;
    }



   return 0;
}



wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值