下面代码为单链表的一些基本操作:
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct Lnode
{
ElemType data;
struct Lnode *next;
}*LinkList;
//逆序建立链表
LinkList ReCreateLinkList(LinkList &L)
{
int n = 0;
cout<<"请输入要创建的元素的个数n:"<<endl;
cin>>n;
char str[100];
sprintf(str,"请输入%d个元素\n",n);
cout<<str<<endl;
int elem;
L = (LinkList)malloc(sizeof(Lnode));
L->next = NULL;
for(int i=0;i<n;i++)
{
cin>>elem;
LinkList p = (LinkList)malloc(sizeof(Lnode));
p->data = elem;
p->next = L->next;
L->next = p;
}
cout<<"L = "<<L<<endl;
return L;
}
/*顺序实现链表
--思路一定要清晰
*/
LinkList CreateLinkList(LinkList &head)
{
int n = 0;
cout<<"请输入要创建的元素的个数n:"<<endl;
cin>>n;
char str[100];
sprintf(str,"请输入%d个元素\n",n);
cout<<str<<endl;
int elem;
head = (LinkList)malloc(sizeof(Lnode));
head->next = NULL;
LinkList L = head;
for(int i=0;i<n;i++)
{
cin>>elem;
LinkList p = (LinkList)malloc(sizeof(Lnode));
p->data = elem;
p->next = NULL;
L->next = p;
L = p;
}
return head;
}
//另一种实现方式,C++程序设计语言提示:这种方法是错误的,指针作为局部变量返回
//上面的注释是错误的,可以返回局部指针变量的值,值可以为地址。但是不可以返回局部变量的地址。刚刚理解这句话:-D
LinkList createLinkListAnthor(LinkList &L)
{
//
LinkList head;
head = (LinkList)malloc(sizeof(Lnode));
L = head;
int n = 0;
cout<<"请输入要创建的元素的个数n:"<<endl;
cin>>n;
char str[100];
sprintf(str,"请输入%d个元素\n",n);
cout<<str<<endl;
int elem = 0;
for(int i=0;i<n;i++)
{
cin>>elem;
LinkList p = (LinkList)malloc(sizeof(Lnode));
p->data = elem;
p->next = NULL;
L->next = p;
L = p;
}
return head;
}
//查找倒数第K个结点的值
ElemType findValue(LinkList &L,int k)
{
LinkList p = L;
for(int i=0;i<k-1;i++)
{
p = p->next;
}
while(p->next != NULL)
{
p = p->next;
L = L->next;
}
return L->data;
}
//求链表中的最大值
LinkList findMax(LinkList L)
{
LinkList p = L->next;
L = p;
int max = p->data;
while(L != NULL)
{
if(L->data > max)
{
max = L->data;
p = L;
}
L = L->next;
}
return p;
}
//求链表中的最小值
LinkList findMin(LinkList L)
{
LinkList p = L->next;
L = p;
int min = p->data;
while(L != NULL)
{
if(L->data < min)
{
min = L->data;
p = L;
}
L = L->next;
}
return p;
}
LinkList insertLinkList(LinkList &L,int i,int value)
{
LinkList Head = L;
int k = 0;
while(k < i)
{
Head = Head->next;
k++;
}
LinkList p = (LinkList)malloc(sizeof(Lnode));
p->data = value;
p->next = Head->next;
Head->next = p;
return L;
}
LinkList deleteLinkList(LinkList &L,LinkList p)
{
while(L->next != p)
{
L = L->next;
}
if(L->next == p)
{
L->next = p->next;
delete p;
}
return L;
}
LinkList deleteLinkList(LinkList &L,int location)
{
LinkList Head = L;
int k = 0;
while(k < location)
{
Head = Head->next;
k++;
}
/*
LinkList p = Head->next;
cout<<p->data<<" "<<p->next->data<<endl;
Head->next = p->next;
delete p;
*/
/*好好注意 内存问题*/
cout<<Head->next->data<<" "<<Head->next->next->data<<endl;
Head->next = Head->next->next;
return L;
}
void print(LinkList L)
{
while(L->next != NULL)
{
cout<<L->next->data<<" ";
L = L->next;
}
cout<<endl;
}
void main()
{
/*
LinkList L;
LinkList L1 = ReCreateLinkList(L);
print(L1);
LinkList L2;
LinkList L3 = CreateLinkList(L2);
print(L3);
*/
LinkList L4;
L4 = createLinkListAnthor(L4);
print(L4);
insertLinkList(L4,4,100);
print(L4);
deleteLinkList(L4,2);
print(L4);
}