單鏈表的逆序

2021-06-20 11:03:46 字數 1019 閱讀 1755

單鏈表的逆序有以下幾種方法:

第一種方法:堆疊法,將原鍊錶元素依序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 ...

單鏈表逆序

第二個題目是很經典的 單鏈表逆序 問題。很多公司的面試題庫中都有這道題,有的公司明確題目要求不能使用額外的節點儲存空間,有的沒有明確說明,但是如果面試者使用了額外的節點儲存空間做中轉,會得到乙個比較低的分數。如何在不使用額外儲存節點的情況下使乙個單鏈表的所有節點逆序?我們先用迭代迴圈的思想來分析這個...

單鏈表逆序

很經典的 單鏈表逆序 問題。很多公司的面試題庫中都有這道題,有的公司明確題目要求不能使用額外的節點儲存空間,有的沒有明確說明,但是如果面試者使用了額外的節點儲存空間做中轉,會得到乙個比較低的分數。如何在不使用額外儲存節點的情況下使乙個單鏈表的所有節點逆序?我們先用迭代迴圈的思想來分析這個問題,鍊錶的...