题目:
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
提示:
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list
答案:
构建一个新头结点newhead,还有一个先锋结点front。因为head要指向新头以达到反转的目的,它的下一个结点会丢失,所以必须要提前保存,也就是front的作用。还有一点很巧妙,就是初始化newhead=NULL,这样原头结点head反转第一步直接指向了NULL,也就成为了反转后的尾。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* newhead;
struct ListNode* front;
newhead=NULL;
while(head!=NULL) {
front=head->next;
head->next=newhead;
newhead=head;
head=front;
}
return newhead;
}