题目描述

给你一个链表,你需要将他反转的链表新的头部返回出去。

Solution

最佳操作,三指针推动,一个指向前驱pre,一个指向当前节点now,一个指向后继节点nex,依次先后推进,并且可以保证链表信息不丢失。

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        ListNode* pre = NULL;
        ListNode* now = pHead;
        ListNode* nex = NULL;
        while(now){
            nex = now->next;
            now->next = pre;
            pre = now;
            now = nex;
        }
        return pre;
    }
};