. 倒转linked list
#include <stdio.h>
#include <stdlib.h>
struct lgc_list {
struct lgc_list *next;
int value;
};
void show_list(struct lgc_list *head);
struct lgc_list *reverse_list(struct lgc_list *head);
/* 递归版 */
struct lgc_list * find_node(struct lgc_list *head, int n)
{
if (n <= 0) {
printf("argument error!\n");
return NULL;
}
if ( n == 1 || head == NULL) {
return head;
}
find_node(head->next, n - 1);
}
*/
struct lgc_list *reverse_list(struct lgc_list *head)
{
struct lgc_list *pos = head;
struct lgc_list *new = NULL;
struct lgc_list *tmp;
while (pos != NULL) {
tmp = pos->next;
pos->next = new;
new = pos;
pos = tmp;
}
return new;
}
void show_list(struct lgc_list *head)
{
while (head != NULL) {
printf("%4d", head->value);
head = head->next;
}
printf("\n");
}
int main()
{
int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
struct lgc_list *head = NULL;
struct lgc_list *f = NULL;
int i = 0;
while (i < 10) {
struct lgc_list *node;
node = malloc(sizeof(struct lgc_list));
node->value = array[i];
node->next = head;
head = node;
i++;
}
show_list(head);
f = find_node(head, 3);
if (f != NULL) {
printf("third node value = %d\n", f->value);
}
else {
printf("third node is NULL, not exist!\n");
}
f = find_node(head, 11);
if (f != NULL) {
printf("11th node value =%d\n", f->value);
}
else {
printf("11th node is NULL , not exist!\n");
}
head = reverse_list(head);
show_list(head);
return 0;
}