在C語言中,要實現(xiàn)單向鏈表的逆序,我們需要改變鏈表中每個節(jié)點的next指針,使其指向前一個節(jié)點。以下是實現(xiàn)這一功能的步驟:
以下是具體的C語言代碼實現(xiàn):
#include <stdio.h>
#include <stdlib.h>
// 定義鏈表節(jié)點結(jié)構(gòu)體
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 創(chuàng)建新節(jié)點的函數(shù)
ListNode* createNode(int val) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = NULL;
return newNode;
}
// 逆序鏈表的函數(shù)
void reverseList(ListNode** head) {
ListNode* prev = NULL;
ListNode* curr = *head;
ListNode* next = NULL;
while (curr != NULL) {
// 保存當(dāng)前節(jié)點的下一個節(jié)點
next = curr->next;
// 將當(dāng)前節(jié)點的next指針指向前一個節(jié)點
curr->next = prev;
// 更新prev和curr指針
prev = curr;
curr = next;
}
// 更新鏈表的頭節(jié)點
*head = prev;
}
// 打印鏈表的函數(shù)
void printList(ListNode* head) {
ListNode* curr = head;
while (curr != NULL) {
printf("%d -> ", curr->val);
curr = curr->next;
}
printf("NULL\n");
}
int main() {
// 創(chuàng)建鏈表:1 -> 2 -> 3 -> 4 -> 5 -> NULL
ListNode* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(4);
head->next->next->next->next = createNode(5);
printf("原鏈表:\n");
printList(head);
// 逆序鏈表
reverseList(&head);
printf("逆序后的鏈表:\n");
printList(head);
return 0;
}
運行上述代碼,輸出結(jié)果為:
原鏈表:
1 -> 2 -> 3 -> 4 -> 5 -> NULL
逆序后的鏈表:
5 -> 4 -> 3 -> 2 -> 1 -> NULL