反转单链表
/*反转链表*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct tmpdata
{
int data;
struct tmpdata *next;
}Node;
int main(void)
{
Node *head, *rear, *font;
int i;
head = (Node *)malloc(sizeof(Node));
rear = head;
rear->next = NULL;
srand((unsigned)time(NULL)); //生成随机种子
//给链表赋值,链表初始化
for (i = 0;i < 10; i++)
{
font = (Node *)malloc(sizeof(Node));
font->data = rand() % 30 + 20;
rear->next = font;
rear = font;
}
rear->next = NULL;
//打印原始链表查看
font = head->next;
while (font != NULL)
{
printf("%d\t", font->data);
font = font->next;
}
//单链表的反转,用到4个指针,一个头指针固定,两个指针控制节点的行进,一个指针接收拆下来的节点并组成新的链表
Node *tmp;
font = head->next;
rear = head->next;
//printf("head = %d\tfont = %d\trear = %d\trear->next = %d", head->data, font->data, rear->data, rear->next->data);
tmp = NULL;
while (font != NULL)
{
font = font->next;
rear->next = tmp;
tmp = rear;
rear = font;
}
head->next = tmp;
putchar('\n');
//打印反转之后的链表
rear = head->next;
while (rear != NULL)
{
printf("%d\t", rear->data);
rear = rear->next;
}
return 1;
}