已知单链表的头节点 head
,反转链表,并返回反转后的链表。
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
解题:
(1)迭代(从头到尾一个一个移到新节点前)
时间复杂度:O(n);空间复杂度:O(1)。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* pre = NULL;
// struct ListNode*
while(head != NULL){
struct ListNode* next = head -> next;
head -> next = pre;
pre = head;
head = next;
}
return pre;
}
(2)递归