單鏈表的逆置是乙個非常經典的問題,這裡利用兩個思想進行解決。
首先,我們需要看下原理圖,其實兩個思想都是一樣的,都是使後乙個的節點的 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...