直接循环
图片解释
ListNode* ReverseList1(ListNode *head)
{
if(head == NULL || head->next == NULL)
{
return head;
}
ListNode* tail = NULL;
ListNode* p = head;
ListNode* s = head ->next;
while (s != NULL)
{
p->next = tail;
tail = p;
p = s;
s = s->next;
}
p->next = tail;
return p;
}
头插法
图片解释
ListNode* ReverseListInsertHead(ListNode *head)
{
if(head == NULL || head->next == NULL)
{
return head;
}
ListNode* p = NULL;
ListNode* s = head;
head = NULL;
while(s != NULL)
{
p = s;
s = s->next;
p->next = head;
head= p;
}
return head;
}
递归法
ListNode* ReverseListRecur(ListNode *head)
{
if(head == NULL || head->next == NULL)
{
return NULL;
}
ListNode* newhead = ReverseListRecur(head->next);
head->next->next = head;
head->next = NULL;
return newhead;
}