/*
编写一个单链表反序的函数
*/
#include <iostream>
#include <time.h>
typedef int datatype;
using namespace std;
typedef struct node
{
struct node *next;
datatype data;
}Node;
void initNode(Node **head)
{
*head = NULL;
}
void printNode(Node *head)
{
Node* p;
p = head;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
Node* insertNode(Node *head, datatype val)
{
Node *insNode = (Node*)malloc(sizeof(Node));
insNode->data = val;
insNode->next = NULL;
if (head == NULL)
{
head = insNode;
}
else
{
insNode->next = head->next;
head->next = insNode;
}
return head;
}
Node* Reverse(Node* head)
{
//没有节点或只有一个节点
Node *p, *pre, *cur;
if (head == NULL )
return NULL;
if (head->next == NULL)
return head;
pre = p = head;
p = p->next;
head->next = NULL;
while ( p != NULL)
{
cur = p;
p = p->next;
cur->next = pre;
pre = cur;
}
head = cur;
return head;
}
int main()
{
Node* head;
int i;
srand(time(NULL));
initNode(&head);
for (i = 0; i < 100; i++)
head = insertNode(head, rand()%20);
cout << "Before Reverse:" << endl;
printNode(head);
head = Reverse(head);
cout << "After Reverse:" << endl;
printNode(head);
system("PAUSE");
return 0;
}
单链表转置
最新推荐文章于 2021-06-23 23:54:45 发布