赞
踩
单链表的逆置:
方法一:向后转,第一个点变为最后一个,时间复杂度O(n)
(1):将第一个点置空
(2):再创建一个指针s指向还未处理的结点的第一个
(3)再p赋值为q,q赋值为s,s赋值为q->next,再把p的值赋值给p->next,一直走下去,q==NULL,plist->next=p;结束
代码实现:
void Reverse2(List plist) { if (plist==NULL||plist->next==NULL||plist->next->next==NULL) { return; } Node *p = plist->next; Node *q = p->next; Node *s; p->next = NULL;//一定要置空 while (q!=NULL) { s = q->next; q->next = p; p = q; q = s; } plist->next = p; }
方法二:利用头插的思想,把所有的结点断开,再利用头插方式把所有的结点重新插一次
(1)把plist置空,成为新的链
(2)把p头插到这条新链中,新的链与后面无关 p->next = plist->next;plist->next = p;p->q;q再指向下一个点
(3)再把p头插,重复头插
代码实现:
void Reverse(List plist)//逆置 { if (plist==NULL||plist->next==NULL||plist->next->next==NULL) { return ; } Node *p = plist->next; plist->next = NULL; Node *q; while (p!=NULL) { q = p->next; p->next = plist->next; plist->next = p; p = q; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。