C語言實現單鏈表的逆置

2021-06-18 09:20:00 字數 2073 閱讀 8160

單鏈表的逆置是乙個非常經典的問題,這裡利用兩個思想進行解決。

首先,我們需要看下原理圖,其實兩個思想都是一樣的,都是使後乙個的節點的 next 指標指向前乙個節點,依次遞推,直到第二個節點指向第乙個節點,第乙個節點的 next 指標指向 null。

第一種方法:

在鍊錶往前走的過程中,記錄前乙個節點,當前節點和後乙個節點,並使當前節點的 next 指標指向前乙個節點,直到最後乙個節點指向倒數第二個節點

演算法實現如下:

void reverse_list(linklist list)

list->next = null;

list = pre;

print(list);

return;

}

第二種方法這裡利用遞迴的思想,首先完成最後乙個節點指向倒數第二個,再使倒數第二個指向倒數第三個,。。。直到第二個指向第乙個節點,第乙個節點指向 null,思想和第一種方法正好是相反的演算法實現如下:

void reverse_the_list(linkednode *cur, linklist *list)

else

return;

}

下面給出完整的實現和實驗結果:

#include #include typedef int datatype;

typedef struct node

linkednode, *linklist;

linklist create_list()

; int len = sizeof(value) / sizeof(datatype);

int i = 0;

linkednode *list_head = null;

linkednode *temp = null;

linkednode *p = null;

list_head = (linkednode*)malloc(sizeof(linkednode));

list_head->data = value[0];

list_head->next = null;

temp = list_head;

for(i = 1; i < len; i++)

p = (linkednode*)malloc(sizeof(linkednode));

p->data = value[i];

p->next = null;

temp->next = p;

} return list_head;

}/*列印鍊錶中的各個節點*/

void print(linklist list)

printf("\n");

return;

}void reverse_list(linklist list)

list->next = null;

list = pre;

print(list);

return;

}void reverse_the_list(linkednode *cur, linklist *list)

else

return;

}int main()

執行結果如下所示:

單鏈表逆置實現(C )

對於單鏈表的逆置有兩種方法可以實現 1 利用輔助指標實現 基本思想 在遍歷結點的過程中,設定輔助指標,用於記錄先前遍歷的結點。這樣依次遍歷的過程中只需修改其後繼結點的next域即可。實現 如下 typedef int datatype 型別定義 typedef struct nodelinkedno...

C語言實現帶表頭單鏈表的就地逆置

include include define error 0 define ok 1 typedef int elemtype 建立帶表頭結點的單鏈表 typedef struct node node typedef struct headerlist typedef int status stat...

單鏈表的逆置 C 實現

對於單鏈表的逆置有兩種方法可以實現 1 利用輔助指標 基本思想 在遍歷結點過程中,設定輔助指標,用於記錄先前遍歷的結點。這樣依次編譯的過程中只需修改其後繼結點的next域即可。實現 cpp view plain copy print typedef int datatype 型別定義 typedef...