前言
题目:给你单链表的头节点 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;
}
结果如图所示:
总结
做力扣的题目,如果自己没思路的时候,看别人的代码是最难受的,但是学会看懂别人的思路,然后再自己写代码,这才是最重要的。