逆转单向链表
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
void list_reverse(struct Node **head)
{
struct Node *cur, *rev;
struct Node *hold;
cur = *head;
rev = 0;
while (cur) {
hold = cur;
cur = cur->next;
hold->next = rev;
rev = hold;
}
*head = rev;
}
void list_print(const struct Node *head)
{
while (head) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
void list_push(struct Node **head, int data)
{
struct Node *node;
node = (struct Node *)malloc(sizeof(struct Node));
if (!node) return;
node->data = data;
node->next = *head;
*head = node;
}
void list_clear(struct Node **head)
{
struct Node *cur, *hold;
cur = *head;
while (cur) {
hold = cur;
cur = cur->next;
free(hold);
}
*head = 0;
}
int main()
{
struct Node *list = 0;
list_push(&list, 1);
list_push(&list, 3);
list_push(&list, 5);
list_push(&list, 7);
list_push(&list, 9);
list_print(list);
list_reverse(&list);
list_print(list);
list_clear(&list);
return 0;
}本文出自 “chhquan” 博客,请务必保留此出处http://chhquan.blog.51cto.com/1346841/1567617
原文:http://chhquan.blog.51cto.com/1346841/1567617