题解 | #反转链表#

反转链表

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;
    }
};

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

全部评论

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务