// ListReverse.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct list_Node
{
int data;
struct list_Node *next;
}Node;
int reverseList(Node **head)
{
if((*head)==NULL)
{
return 1;
}
else if((*head)->next==NULL)
{
return 0;
}
else
{
Node *pre=*head;
Node *cur=(*head)->next;
pre->next=NULL;
Node *next;
do
{
next=cur->next;
cur->next=pre;
pre=cur;
cur=next;
}while(cur!=NULL);
*head=pre;
return 0;
}
}
Node* deleteList(Node *head, int data)
{
Node *p1=(Node *)malloc(sizeof(Node));
Node *p2=head;
p1->next=p2;
head=p1;
while(p2!=NULL&&p2->data!=data)
{
p1=p2;
p2=p2->next;
};
if(p2!=NULL&&p2->data==data)
{
p1->next=p2->next;
free(p2);
}
p1=head->next;
free(head);
return p1;
}
void printList(Node *head)
{
Node *p=head;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
}
Node* insertList(Node *head,int index,int data)
{
Node* inData=(Node *)malloc(sizeof(Node));
inData->data=data;
inData->next=NULL;
Node* pre=(Node *)malloc(sizeof(Node));
pre->next=head;
head=pre;
for(int i=1;i<index;i++)
{
if(pre->next!=NULL)
{
pre=pre->next;
}
else
{
break;
}
}
inData->next=pre->next;
pre->next=inData;
pre=head->next;
free(head);
return pre;
}
Node* createList(int n)
{
if(n<0)
{
return NULL;
}
Node* head;
Node* p1=(Node *)malloc(sizeof(Node));
Node* p2;
head=p1;
cout<<"输入"<<n<<"个数:"<<endl;
for(int i=0;i<n;i++)
{
p2=(Node *)malloc(sizeof(Node));
cin>>p2->data;
p1->next=p2;
p2->next=NULL;
p1=p2;
}
cout<<endl;
head=head->next;
return head;
}
int _tmain(int argc, _TCHAR* argv[])
{
Node *head=createList(5);
cout<<"正序"<<endl;
printList(head);
cout<<endl<<reverseList(&head)<<endl;
cout<<"倒叙"<<endl;
printList(head);
int data=1;
while(data)
{
cout<<endl<<"删除节点:"<<endl;
cin>>data;
head=deleteList(head,data);
cout<<"删除后结果:"<<endl;
printList(head);
}
while(1)
{
cout<<endl<<"插入节点:"<<endl;
int index;
cin>>index>>data;
head=insertList(head,index,data);
cout<<"插入后结果:"<<endl;
printList(head);
}
system("pause");
return 0;
}