给你单链表的头指针head
,请你反转链表,并返回反转后的链表。
- 示例:
解法 1:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode *q = NULL;
while( head ) {
struct ListNode *p = head->next;
head->next = q;
q = head;
head = p;
}
return q;
}
解法 2 - 递归:
/**
* 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;
else {
struct ListNode *p = reverseList(head->next);
head->next->next = head;
head->next = NULL;
return p;
}
}