Description:
Reverse a singly linked list.
Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?
使用迭代和递归的方法实现单链表的逆置
我们追求不仅仅是实现单链表的逆置,而是就地逆置,也就是辅助空间O(1)的逆置方法
迭代法
struct ListNode* reverseList(struct ListNode* head) {//其实这里的head不是头结点 是第一个结点
struct ListNode *phead,*p2,*p3;
//既然如此 创建一个头结点phead
phead=(struct ListNode *)malloc(struct ListNode);
phead->next=head;
if(head==NULL)
return NULL;
if(head->next==NULL)
return head;
p2=phead->next;
phead->next=NULL;
while(p2)
{
p3=p2;
p2=p2->next;
p3->next=phead->next;
phead->next=p3;
}
return head;
}
递归法
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode *newhead;
if(head==NULL)
return NULL;
if(head->next==NULL)
return head;
newhead=reverseList(head->next); //递归部分
head->next->next=head; //回溯部分
head->next=NULL;
return newhead;
}
方法的详细过程另外写一篇文章说明