Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode *L,*tmp;
L = ( struct ListNode* ) malloc( sizeof( struct ListNode* ) );
if( head == NULL ) return NULL;
L->val = head->val;
L->next = NULL;
head = head->next;
while(head != NULL)
{
tmp = ( struct ListNode* ) malloc( sizeof( struct ListNode* ) );
tmp->val = head->val;
tmp->next = L;
L=tmp;
head = head->next;
}
return L;
}
不使用额外空间的方法如下:
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode *L,*P;
if(!head || !head->next ) return head;
P=head;
while(head->next)
{
L=head->next;
head->next = L->next;
L->next=P;
P=L;
}
return P;
}