如何把一个单链表进行反转,这个问题我已经被问过两次,一次是百度面试,另一次是中科院计算所。
方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。
方法2:使用三个指针遍历单链表,逐个链接点进行反转。
方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。
方法1浪费空间,不建议。
方法2代码如下:
ActList* ReverseList2(ActList* head)
{
if(NULL==head|| NULL==head->next)
return head;
ActList* p;
ActList* q;
ActList* r;
p = head;
q = head->next;
head->next = NULL;
while(q)
{
r = q->next; //
q->next = p;
p = q; //
q = r; //
}
head=p;
return head;
}
方法3:
view plainActList* ReverseList3(ActList* head)
{
ActList* p;
ActList* q;
p=head->next;
while(p->next!=NULL){
q=p->next;
p->next=q->next;
q->next=head->next;
head->next=q;
}
p->next=head;//相当于成环
head=p->next->next;//新head变为原head的next
p->next->next=NULL;//断掉环
return head;
}