题解 | #反转链表#

反转链表

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

struct ListNode* ReverseList(struct ListNode* pHead ) {
    if(pHead==NULL)             //一定要先检查是不是空指针
    {
        return NULL;
    }
    else if(pHead->next==NULL)     //再检查是不是单个节点的指针,顺序不能错
    {
        return pHead;
    }
    else                            //再进行下面的操作否则会涉嫌访问非法内存
    {
        struct ListNode *p=pHead;   //拿到头节点
        struct ListNode *q=p->next//拿到第二个节点
        p->next=NULL;               //将第一个节点p与第二个节点断开
        while(q!=NULL)
        {
            p=q;                //将第二个节点拷贝给p
            q=q->next;          //q(原第二个节点)继续遍历
            p->next=pHead;      //拷贝后的p的指针指向头节点
            pHead=p;            //将头节点不停往后移动
        }
        return p;               //最后导致尾节点变为头节点,实现链表反转
    }
}
全部评论

相关推荐

2025-12-23 18:51
中南大学 Java
唉又萌混过关:是不是那种收钱盖实习章的机构?
点赞 评论 收藏
分享
2025-11-27 01:09
电子科技大学 C++
牛客68151836...:实习不相关就靠后写吧,因为大概面试官也不感兴趣。前面区域写一点更容易引起提问的内容,比如投后台就把服务器项目提前。
简历上的经历如何包装
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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