题解 | #反转链表#

反转链表

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

双链表法

一前一后两个指针遍历链表实现反转。指针pre初始化为NULL,指针p初始化为pHead。每次操作将p->next指向pre,同时两指针前移,直到p为空,此时pre即为反转后链表的头指针。

###代码:

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        ListNode *pre = NULL, *p = pHead, *t;
        while (p != NULL) {
            t = p->next;
            p->next = pre;
            pre = p;
            p = t;
        }
        return pre;
    }
};

头插法

新建一个指针head作为反转列表的头指针,遍历原链表,用头插法将所有结点插入到head中,返回head即可。

###代码:

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        ListNode *head = nullptr;
        while (pHead) {
            ListNode *t = pHead;
            pHead = pHead->next;
            t->next = head;
            head = t;
        }
        return head;
    }
};

入栈后出栈即可,编码简单,不予给出。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 18:25
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务