题目描述
输入一个链表,反转链表后,输出新链表的表头。
方法一:(递归)
ListNode* reverseList(ListNode* head)
{
if (head == NULL || head->next == NULL)return head;
ListNode* h = reverseList(head->next);
head->next->next = head;
head->next = NULL;
return h;
}
方法二:
ListNode* ReverseList(ListNode* head)
{
if (NULL == head || NULL == head->next) return head;
ListNode* prev = NULL;
ListNode* curr = head;
ListNode* next = NULL;
while (curr)
{
next = curr->next;//暂存当前节点的下一节点,用于后移
curr->next = prev;//将当前节点指向它前面的节点
prev = curr;//前指针后移
curr = next;//当前指针后移
}
return prev;
}
思路: