链表的各种操作:
#include <iostream>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}NodeTp, *LinkList;
//删除表中所有大于mink且小于maxk的元素,假设链表升序排列
typedef enum { ERROR, OK } Status;
LinkList crt()
{
LinkList h, p, last; int a;
h = new NodeTp; last = h;
cout << "请输入链表元素" << endl;
while (1)
{
cin >> a; if (a == 0)break;
p = new NodeTp; p->data = a;
last->next = p; last = p;
}
last->next = NULL;
return h;
}//创建一个升序链表
LinkList delebet(LinkList L, int mink, int maxk)
{
LinkList p, s;
p = L->next;
s = L; //从动指针的初始化
while (p != NULL)
{
cout<< "ok" << endl;
if (p->data > mink&&p->data<maxk)
{
s -> next = p->next;
delete p;//释放空间
p = s->next;
}
else
{
p = p -> next;
s = s->next;
}
}
return L;
}
void print_list(LinkList h)
{
LinkList p;
p = h->next;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
}
Status diffierent(LinkList h)
{
LinkList p,s,sl;
p = h;
s = h;
if (h = NULL)
return ERROR;
else
while (s->next!= NULL)
{
int temp;
s = s->next;
temp = s->data;
p = s->next;//实现外层循环中p的初始化;
sl = s;
while (p != NULL)
{
if (p->data == temp)
{
sl->next = p->next;
delete p;
p = sl->next;
}
else
{
sl = p;
p = p->next;
}
}
}
return OK;
}
void reverse(LinkList h)
{
LinkList pr, p, pn;
pr = h; p = h->next;
while (p)
{
pn = p->next; p->next = pr;
pr = p; p = pn;
}
if (h->next)//排除空链表
{
h->next->next = NULL;//创造出逆序链表的尾指针
h->next= pr;
}
}
void mergelist(LinkList h1, LinkList h2, LinkList h3)
{
LinkList p1, p2, p3;
p1 = h1->next;
p2 = h2->next;
h1 = p3 = h3;
while (p1&&p2)
{
if (p1->data <= p2->data)
{
p3->next = p1;
p3 = p1;
p1 = p1->next;
}
else
{
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
p3->next = p1 ? p1 : p2;
free(h2);
}
}
void main()
{
LinkList h;
h = crt();
//int mink = 2, maxk = 5;
print_list(h);
//h = delebet(h, mink, maxk);
//打印链表;
cout << endl;
cout << endl;
Status s=diffierent(h);
cout << "运行状态为" << endl;
cout << s << endl;;
print_list(h);
cout << endl;
reverse(h);
cout<<"反转后的链表元素为"<<endl;
print_list(h);
int x;
cout << "请输入一个值停止调试" << endl;
cin >> x;
}