前言
题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
一、示例


二、代码
由于官方的代码难以理解,我参照了官方的思路,然后理解思路以后,自己重新写代码。
代码如下(示例):
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
if(head == NULL) {
return NULL;
}
if(head->next == NULL) {
return head;
}
struct ListNode* rear = head;//表示链表的尾部
struct ListNode* pNext = rear->next;//表示当前位置的下一个结点
struct ListNode* temp = pNext->next;//保存pNext后剩余的链表
rear->next = NULL;
while(temp) {
pNext->next = rear;
rear = pNext;//尾部变成最新的一个
pNext = temp;
temp = temp->next;
}
//当pNext是最后一个,temp就是最后一个的下一个,也就是NULL的时候,退出循环,执行最后一次添加尾部
pNext->next = rear;
rear = pNext;//尾部变成最新的一个
return rear;
}
结果如图所示:

总结
做力扣的题目,如果自己没思路的时候,看别人的代码是最难受的,但是学会看懂别人的思路,然后再自己写代码,这才是最重要的。
本文通过一个具体的编程题目——反转单链表,详细解释了如何理解和实现这个过程。作者首先介绍了问题背景,接着提供了自己的代码实现,强调了理解他人代码并重新编码的重要性。最后,展示了反转链表后的结果,帮助读者更好地掌握这一技巧。
4021

被折叠的 条评论
为什么被折叠?



