给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
//递归法
// struct ListNode* reverseList(struct ListNode* head){
// if((head == NULL) || (head->next == NULL))
// return head;
// struct ListNode *NewHead = reverseList(head->next);
// head->next->next = head;
// head->next = NULL;
// return NewHead;
// }
//非递归法
struct ListNode* reverseList(struct ListNode* head){
struct ListNode *prev , *curr , *temp;
prev = NULL;
curr = head;
temp = head;
while(temp)
{
temp = temp->next;
curr->next = prev;
prev = curr;
curr = temp;
}
return prev;
}
非递归采用三个指针
递归暂时不是特别懂,他应该是有一种规律,用递归的一种套路一样。(弄懂了再来补充)