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


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


题目描述

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

不多说看代码:


#include
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<val<next;
    }



   return 0;
}



你可能感兴趣的:(链表反转 -- 剑指Offer C++ Class)