题解 | #反转链表#

反转链表

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

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 * };
 */

/**
 *
 * @param pHead ListNode类
 * @return ListNode类
 */

//使用头插法反转链表
//头结点也有值,就是相当于不带头结点的链表逆置
struct ListNode* ReverseList(struct ListNode* pHead ) {
    // write code here
    //该链表为空或只有一个结点时直接返回结果
    if (pHead == NULL || pHead->next == NULL) {
        return pHead;
    }
    struct ListNode* newHead, *p, *q;
    newHead = pHead;
    p = pHead->next;
    pHead->next = NULL; //当前第一个结点即为逆置后的最后一个结点,将其next提前设置为NULL
    while (p) {
        q = p->next;
        p->next = newHead;
        newHead = p;
        p = q;
    }
    return newHead;
}

由于头结点也保存了数据,就相当于不带头结点的链表逆置,采用双指针+头插法逆置。

全部评论

相关推荐

10-25 19:38
已编辑
门头沟学院 嵌入式工程师
点赞 评论 收藏
分享
10-17 23:18
已编辑
西北农林科技大学 Web前端
独行m:给25可以试试,但他只能给12,那就是纯纯的事精
秋招,不懂就问
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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