面试题16 反转链表

题目链接:面试题16 反转链表

我的思路

  1. 反转链表的基本思路就是把指向后驱的指针指向前驱
  2. 如果把指针的指向改变,无法继续遍历链表,所以需要辅助指针
  3. 一句话秒杀:指针指向前驱,前驱节点后驱

实现代码

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        //反转后头指针
        ListNode* pReversedHead = NULL;
        //遍历指针
        ListNode* pNode = pHead;
        //前驱指针
        ListNode* pPrev = NULL;
        while(pNode != NULL)
        {
            ListNode* pNext = pNode->next;
            if(pNext == NULL)
                pReversedHead =pNode;
            pNode->next=pPrev;
            pPrev=pNode;
            pNode=pNext;
        }
        return pReversedHead;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目:输入一个链表,反转链表后,输出链表的所有元素。 思路1:用列表保存链表中的所有元素,然后将其进行反转,新建链...
    minningl阅读 235评论 0 0
  • 题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点 递归算法: 1.找到最后一个节点和倒...
    Felicia1993阅读 339评论 0 0
  • //leetcode中还有花样链表题,这里几个例子,冰山一角 求单链表中结点的个数----时间复杂度O(n)这是最...
    暗黑破坏球嘿哈阅读 1,535评论 0 6
  • 题目描述 输入一个链表,反转链表后,输出链表的所有元素。 代码实现 主要思路 1、首先我们需要3个结点,第一个是当...
    _minimal阅读 195评论 0 0
  • 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。 解法:
    qmss阅读 194评论 0 0