题解 | 反转链表

反转链表

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

1,首先创建一个头节点dummyNode,用于始终指向链表的头部,该头节点的下一个节点指向我们要翻转的链表;
2,设置一个*pre节点,该节点始终是dummyNode节点,既头结点指针;
3,设置一个cur节点,该节点始终是head节点,cur节点的下一个节点始终指向下一个要翻转的节点;
4,设置一个next节点,该节点指向接下来要做翻转的节点,在做翻转处理的时候,一直移动的是next节点;
/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
#include <stdlib.h>
struct ListNode* ReverseList(struct ListNode* head ) {
    struct ListNode *dummyNode = malloc(sizeof(struct ListNode));
    dummyNode->val = -1;
    dummyNode->next = head;

    if (head == NULL || head->val == NULL)
        return head;
    
    struct ListNode *pre = dummyNode;
    struct ListNode *cur = pre->next;
    struct ListNode *next;
    while (cur->next) {
        next = cur->next;
        cur->next = next->next;
        next->next = pre->next;
        pre->next = next;
    }

    return dummyNode->next;
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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