// 字串查找.cpp : 定义控制台应用程序的入口点。
//单链表
#include "stdafx.h"
#include <iostream>
#include <complex>
using namespace std;
typedef struct node {
int data;//节点内容
node *next;//下一个节点
}node;
//创建单链表
node *create(){
node *head,*p,*q;
int i=0; //单链表中数据的个数
int a=-1;
head=new node;//创建头节点
head->next=NULL;
while (1)
{
cout<<"please input the data(input -1,quit):";
cin>>a;
if (-1==a) //如果输入的是-1,退出
{
break;
}
p=new node;
p->data=a;
p->next=NULL;//链表的最后一个指针为NULL
if (++i==1) //链表只有一个元素
{ //连接到head的后面
head->next=p;
}
else{
q->next=p;//连接到链表尾端
}
q=p;//q指向末节点
}
return head;
}
//打印单链表
void print(node *head){
node *p=head->next;
int index=0;
if (p==NULL)//链表为NULL
{
cout<<"Link is empty!"<<endl;
getchar();
return;
}
while (p!=NULL)//遍历链表
{
cout<<"The "<<++index<<"th node is :"<<p->data<<endl;//打印元素
p=p->next;
}
}
//单链表逆置
node *reverse(node *head){
node *p,*q,*r;
if (head->next==NULL)//链表为空
{
return head;
}
p=head->next;
q=p->next;//保存原第2个节点
p->next=NULL;//原第1个节点为末节点
while (q!=NULL)//遍历,各个节点的next指针反转
{
r=q->next;
q->next=p;
p=q;
q=r;
}
head->next=p;//新的第一个节点为原末节点
return head;
}
int _tmain(int argc, _TCHAR* argv[])
{
node *head=create();//创建单链表
node *preverse=reverse(head);
print(preverse);
system("pause");
delete [] head;
return 0;
}