链表结点声明、建立、打印及反转。
#include <iostream>
#include <cstdlib>
using namespace std;
//链表结点结构体
typedef struct LinklistNode{
char data;
struct LinklistNode* next;
}LNode;
//链表创建函数,参数为链表头结点和将要插入链表末尾的值,返回链表头结点
LNode* creatLinklist(LNode* &head, char val)
{
if(head==NULL)
{
LNode* head=new LNode;
head->data=val;
head->next=NULL;
return head;
}
else
{
LNode* flag=head;
while(flag->next!=NULL)
{
flag=flag->next;
}
LNode* last=new LNode;
last->data=val;
last->next=NULL;
flag->next=last;
return head;
}
}
//打印链表
void printLinklist(LNode* head)
{
if(head==NULL) return;
LNode* flag=head;
while(flag!=NULL)
{
cout<<flag->data<<endl;
flag=flag->next;
}
return;
}
//链表反转,参数与返回值皆为链表头结点
LNode* reverseLinklist(LNode* head)
{
if(head==NULL||head->next==NULL) return head;
LNode* p0=head;
LNode* p1=p0->next;
LNode* p2=p0->next->next;
while(p2!=NULL)
{
p1->next=p0;
p0=p1;
p1=p2;
p2=p2->next;
}
p1->next=p0;
head->next=NULL;
return p1;
}
//主函数
int main()
{
LNode*head=NULL;
head=creatLinklist(head, 'a');
head=creatLinklist(head, 'b');
head=creatLinklist(head, 'c');
head=creatLinklist(head, 'd');
head=creatLinklist(head, 'e');
head=creatLinklist(head, 'f');
head=creatLinklist(head, 'g');
head=creatLinklist(head, 'h');
head=creatLinklist(head, 'i');
printLinklist(head);
LNode* reversedList=reverseLinklist(head);
cout<<"Then reverse the linklist:"<<endl;
printLinklist(reversedList);
system("Pause");
return 0;
}