题解 | #反转链表#C++

反转链表

http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

第一种方法:反向赋值
定义两个节点指针pre为反转之后链表的头,tmp用来保存当前节点的下一节点,先将pre初始化为空,这样循环将phead当前节点指向pre,再将当前节点保存为pre,不断的反向赋值。
第二种方法:利用stl容器和算法,将节点全部放入vector中保存,然后反转,最后在把vector中的元素取出。

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) 
    {
        /*
        ListNode* pre = NULL,*tmp;
        while(pHead)
        {
            tmp = pHead->next;
            pHead->next = pre;
            pre = pHead;
            pHead = tmp;
        }
        return pre;*/
        if (!pHead)
            return pHead;
        vector<ListNode*> iv;
        while (pHead)
        {
            iv.push_back(pHead);
            pHead = pHead->next;
        }
        reverse(iv.begin(), iv.end());
        ListNode* head = iv[0];
        ListNode* cur = head;
        for (int i = 1; i < iv.size(); i++)
        {
            cur->next = iv[i];
            cur = cur->next;
        }
        cur->next = nullptr;
        return head;
    }
};
全部评论

相关推荐

5 1 评论
分享
牛客网
牛客企业服务