题解 | #反转链表#

反转链表

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

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

全部评论

相关推荐

海螺很能干:每次看到这种简历都没工作我就觉得离谱
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务