题目描述:
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
我们可以利用尾插的方式,将head的头结点改成尾结点,然后一个个头插,将最后的数据变成头结点,图解如下:
代码如下:
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* newhead = NULL, * tail = NULL;//定义新节点为空,以及节点指向节点
struct ListNode* cur = head;//用来遍历旧的链表
while (cur != NULL)//节点不为空就一直遍历
{
head = head->next;//将节点的下一个节点作为头结点当前节点准备取出
if (newhead == NULL) //第一次进入 节点为空
{
newhead = tail = cur; //头和存头位置的节点均指向第一个节点
newhead->next = NULL;//因为是头插 所以第一个节点为尾,尾节点指向空
}
else
{
newhead = cur; //头结点为新取下的
newhead->next = tail;//链表连上
tail = newhead;//记住头节点位置
}
cur = head;
}
return newhead;
}