單鏈表的逆置

2021-06-12 07:19:48 字數 1050 閱讀 6964

題目:乙個有頭結點的單鏈表,如何將其逆置。

首先定義乙個結構體:

typedef int datatype;

typedef struct node;

分析:首先考慮一般情況,設定三個指標,分別表示目前,之前,之後位置。pcur,ppre,pnext的節點。逆置時,將pcur的next指標指向ppre,然後將pcur賦值為pnext,接著ppre變為pcur。

接下來考慮,頭結點和尾節點的處理。當頭結點儲存了資料時,設定頭結點為pcur,也就是當前結點。ppre,就是之前結點設定為空。按照上面的操作頭結點的next指標會指向空。如果頭結點為空結點時,將頭結點的下乙個指標設定為當前結點即可。

pcur指標逐漸後移,直到遇到尾節點,此時pcur指向尾節點,pnext指向空。所以可以用pnext是否為空判斷是否到達尾節點。到達尾節點時將pcur賦值給phead.

實現**如下(假設頭結點不為空)

void reverse_list(node *&phead)

node*pcur = phead;

node*ppre = null;

node*pnext = null;

while (ppre)

pcur->next = ppre;

ppre = pcur;

pcur = pnext;

}}

考慮第二種情況,如果頭結點不儲存資料,那麼初始化時將ppcur賦值為phead->next,ppre賦值為null,最後在到達尾節點時,將phead指向尾節點。

void reverse_list(node *&phead)

node*pcur = phead->next;

node*ppre = null;

node*pnext = null;

while (ppre)

pcur->next = ppre;

ppre = pcur;

pcur = pnext;

}}

單鏈表逆置

單鏈表逆置 include include define item num 10 typedef struct tagnode node node linklist create void linklist destroy node head void linklist print node hea...

單鏈表逆置

name 單鏈表逆置 author 巧若拙 date 22 11 14 16 13 description 分別用遞迴和非遞迴兩種方式實現單鏈表 不含頭結點 的逆置 include include include typedef char elemtype typedef int status 函式...

單鏈表逆置

最近在leetcode oj上刷題,將一些演算法題的解法記錄下來,也期待一些新的更好的方法。題目是這樣滴 206.reverse linked list reverse a singly linked list.hint a linked list can be reversed either it...