作者: 华丞臧.
专栏:【数据结构】
各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞+收藏+关注
)。如果有错误的地方,欢迎在评论区指出。
推荐一款刷题网站 👉 LeetCode刷题网站
题目描述
给你单链表的头节点
head
,请你反转链表,并返回反转后的链表。
解题思路
一个链表的节点中存放着下一个节点的地址,节点中next
指针指向下一个节点;那么反转整个链表,也可以看做把链表中的next
指针反转,而链表只能找到当前节点的下一个节点,所以我们需要两个指针一个ptr
保存当前结点的前一个结点地址,一个cur
保存当前节点地址,当然cur
下一个节点也需要保存,依次反转最后cur
就是新链表的表头。
代码实现
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode* cur = head;
if(head == NULL )
{
return head;
}
else if(head->next == NULL)
{
return head;
}
struct ListNode* ptr = head->next;
cur->next = NULL;
while(ptr)
{
struct ListNode* tmp = ptr->next;
ptr->next = cur;
cur = ptr;
ptr = tmp;
}
return cur;
}