题解 | 反转链表
反转链表
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; }