基础数据结构之单链表倒置

1.递归方法
简单来说就是除了空链表和一个结点的链表之外,当结点的下一跳不为空时就继续让下一跳执行倒置。当结点下一跳 为空时,返回该结点给倒数第二个结点,倒数第二个结点将最后一次递归返回的最后一个结点的指针指向自己,然后自己的指针置空,然后返回。依此类推。描述起来有点麻烦,代码比较简介,代码如下:
List Reverse(List i){
if(iNULL){
return NULL;
}
if(i->Next
NULL){
return i;
}
List temp=Reverse(i->Next);
temp->Next=i;
i->Next=NULL;
return i;
}
时间复杂度O(N),空间复杂度O(N).

2.非递归方法
非递归方法与递归方法在时间复杂度上没有区别,但是空间复杂度为常量。
思路是从第一个结点依次往后扫描,用一个pre结点保存当前结点,一个next结点保存下一个结点,最开始pre和next置空,然后next保存当前结点的next,i的Next指向pre,然后pre保存当前结点,依次遍历所有结点,最后返回最后一个结点
代码如下:
List Reverse(List i){
if(iNULL){
return NULL;
}
if(i->Next
NULL){
return i;
}
List pre =NULL;
List next=NULL;
while(i!=NULL){
next=i->Next;
i->Next=pre;
pre=i;
i=next;
}
return pre;
}

你可能感兴趣的:(简单算法的学习,数据结构)