单链表逆序
功能:逆转链表,并返回逆转后的头结点,(给出单链表的结点结构)
typedef struct _node
{
int data;
struct _node * next;
}Node;
函数原型:Node ReverseList(Node head);
#include <stdio.h>
#include <stdlib.h>
typedef struct _node
{
int data;
struct _node * next;
}Node;
void tail_insert(Node *head,Node *new_node)
{
Node *p = head;
if(p->next == NULL)
{
head->next = new_node;
new_node->next = NULL;
}
else
{
while(p->next!=NULL)
{
p = p->next;
}
p->next = new_node;
new_node->next = NULL;
}
}
Node *ReverseList(Node **head)
{
Node *p1,*p2,*p3;
p1 = (*head)->next;
p2 = p1->next;
p3 = NULL;
while(p2 != NULL)
{
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
}
p2 =(*head)->next;
p2->next = NULL;
(*head)->next = p1;
return *head;
}
//Node* nixu(Node **head) //无表头
//{
// Node *p1,*p2,*p3;
// p1 = (*head);
// p2 = p1->next;
// p3 = NULL;
//
// while(p2)
// {
// p3 = p2->next;
// p2->next = p1;
// p1 = p2;
// p2 = p3;
// }
// (*head)->next = NULL;
// (*head) = p1;
// return (*head);
//
//}
void display(Node *head)
{
Node *p = head;
while(p->next !=NULL)
{
p = p->next;
printf("%d\t",p->data);
}
}
void release(Node **head)
{
Node *p;
while(*head != NULL)
{
p = *head;
*head = (*head)->next;
free(p);
}
}
int main()
{
int i =0;
int num = 0;
Node *new_node;
Node *head = (Node*)malloc(sizeof(Node));
head->next = NULL;
for(i= 0;i<10;i++)
{
new_node = (Node*)malloc(sizeof(Node));
new_node->data = i;
tail_insert(head,new_node);
}
display(head);
printf("\n");
ReverseList(&head);
display(head);
release(&head);
return 0;
}