單鏈表的逆序有以下幾種方法:
第一種方法:堆疊法,將原鍊錶元素依序push如堆疊中,然後再pop入新鍊錶中,時空複雜度依然過大,但是這種方法時空複雜度較高;
第二種方法:運用陣列。即先遍歷單鏈表取出元素順序放到陣列中,然後從陣列中逆序取出元素,再次遍歷單鏈表時放入。這種方法也需要額外建立陣列,而且需要遍歷兩次。
第三種方法:直接逆序。
僅遍歷一遍
第四種方法:遞迴。
下面是**
#include
#include
#include
//include
struct node
;struct node *creatnode(int n)//建立鍊錶
if(n<1)
else
return head;
}void prin(struct node* head)//列印鍊錶
couthead->next=null;
if(q==null)
return q;
while(q)
return head;
}struct node* direverse(struct node* head)//遞迴實現鍊錶逆序
struct node *arrar_reverse(struct node* head)//使用陣列實現鍊錶逆序
p=head;
while(p)
return head;
}/*struct node *push_reverse(struct node* head)//使用棧實現鍊錶逆序//沒寫完,待完善
p=head;
while(p)
return head;
}*/void main()
結果為:
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
press any key to continue
單鏈表逆序
include include typedef struct student student typedef struct list list,list list createlist void paixu list l 比較笨拙的一種方法 list reverse list l int main ...
單鏈表逆序
第二個題目是很經典的 單鏈表逆序 問題。很多公司的面試題庫中都有這道題,有的公司明確題目要求不能使用額外的節點儲存空間,有的沒有明確說明,但是如果面試者使用了額外的節點儲存空間做中轉,會得到乙個比較低的分數。如何在不使用額外儲存節點的情況下使乙個單鏈表的所有節點逆序?我們先用迭代迴圈的思想來分析這個...
單鏈表逆序
很經典的 單鏈表逆序 問題。很多公司的面試題庫中都有這道題,有的公司明確題目要求不能使用額外的節點儲存空間,有的沒有明確說明,但是如果面試者使用了額外的節點儲存空間做中轉,會得到乙個比較低的分數。如何在不使用額外儲存節點的情況下使乙個單鏈表的所有節點逆序?我們先用迭代迴圈的思想來分析這個問題,鍊錶的...