给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?
看了很多方法:重要推三指针法和迭代法:
方法一:三指针法
NULL ->pA->pB->pTemp
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode *pA = NULL;
struct ListNode *pB = head;
struct ListNode *pTemp = NULL;
while(pB!=NULL)
{
pTemp = pB->next;
pB->next = pA;
pA = pB;
pB = pTemp;
}
return pA;
}
递归就很巧妙,不过我也没理解上去。
struct ListNode* reverseList(struct ListNode* head){
if(head == NULL || head->next = NULL)
return head;
struct ListNode *p = reverseList(head->next);
head->next->next = head;
head->next = NULL;
return p;
}