链表的一些操作
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct LNode{
int data;
struct LNode * next;
}LNode, *LinkList;
void insertFromHead(LinkList &L)
{
L = new LNode;
L->next = NULL;
int x ;
cin >> x;
while(x != -1)
{
LNode * s = new LNode;
s->data = x;
s->next = L->next;
L->next = s;
cin >> x;
}
}
void insertA(LinkList &L, int a[])
{
L = new LNode;
L->next = NULL;
int i = 0;
while(i < 7)
{
LNode * s = new LNode;
s->data = a[i++];
s->next = L->next;
L->next = s;
}
}
void show(LinkList &L)
{
LNode * p = L->next;
while(p)
{
cout << p->data << " ";
p = p ->next;
}
cout << endl;
}
void delete_digui(LinkList &L, int x)
{
LNode * p;
if(L == NULL) return;
if(L->data == x)
{
p = L;
L = L->next;
delete p;
delete_digui(L,x);
}
else
delete_digui(L->next,x);
}
void show_digui(LinkList &L)
{
if(L->next != NULL)
{
show_digui(L->next);
}
if(L != NULL)
cout << L->data << " ";
}
void delete_min(LinkList &L)
{
LNode *p, *pre, *minp;
p = L->next;
pre = L;
while(p->next)
{
if(p->next->data < pre->next->data)
pre = p;
p = p->next;
}
minp = pre->next;
pre->next = pre->next->next;
delete minp;
}
void reverse_1(LinkList &L)
{
LNode *p = L->next, *r;
L->next = NULL;
while(p)
{
r = p->next;
p->next = L->next;
L->next = p;
p = r;
}
}
void reverse_2(LinkList &L)
{
LNode *pre, *p, *r;
pre = L;
p = L->next;
r = p->next;
p->next = NULL;
while(r)
{
pre = p;
p = r;
r = r->next;
p->next = pre;
}
L->next = p;
}
void sort_insert(LinkList &L)
{
LNode *p = L->next->next,*r, *pre;
L->next->next = NULL;
while(p)
{
r = p->next;
pre = L;
while(pre->next && pre->next->data < p->data)
{
pre = pre->next;
}
p->next = pre->next;
pre->next = p;
p = r;
}
}
LinkList spilt(LinkList &A){
LinkList B = new LNode;
B->next = NULL;
LNode *ra, *rb, *p;
p = A->next;
ra = A; rb = B;
A->next = NULL;
int i = 0;
while(p)
{
i++;
if(i % 2 == 1)
{
ra->next = p;
ra = p;
}
else
{
rb->next = p;
rb = p;
}
p = p->next;
}
ra->next = NULL;
rb->next = NULL;
return B;
}
int main()
{
LinkList A;
int a[] = {1,2,2,6,3,0,1} ;
insertA(A, a);
sort_insert(A);
show_digui(A->next);
cout << endl;
return 0;
}