c带头结点的单链表逆置
头插法
顺序遍历单链表,将遍历的每个节点插到头结点后面。
/* 带头结点的单链表逆置 */ #include<stdio.h> #include<stdlib.h> struct node{ int data; struct node* next; }; struct node* creat(){ //构造单链表 int i; struct node* head; struct node* q; head = (struct node*)malloc(sizeof(struct node)); head->next = NULL; q = head; for(i = 0;i < 20;i++){ struct node* p = (struct node*)malloc(sizeof(struct node)); p->data = i; q->next = p; q = p; q->next = NULL; } head->data = i; //头结点存储节点个数 output(head); //打印 return head; } void output(struct node* head){ struct node* p; p = head; while(p != NULL){ printf("%d ",p->data); p = p->next; } printf("\n"); } struct node* ReverseLink(struct node *head){ //单链表逆置函数,返回头指针 if((head == NULL) || (head->next == NULL)) return head; //如果只有头节点或者只有一个头结点和一个数据节点,不用逆置 struct node* cur; struct node* temp; cur = head->next->next; head->next->next = NULL; while(cur){ temp = cur->next; cur->next=head->next; head->next=cur; cur = temp; } return head; } int main(){ struct node* head = creat(); head = ReverseLink(head); output(head); }