# include <stdio.h>
# include <stdlib.h>
struct node
{
int data;
struct node *next;
} ;
struct node *creat1(int n) //顺序建立链表
{
struct node *head, *tail, *p;
head = (struct node *)malloc(sizeof(struct node ));
head -> next = NULL;
tail = head;
for(int i = 0; i < n; i++)
{
p = (struct node *)malloc(sizeof(struct node ));
scanf("%d", &p -> data);
p -> next = NULL;
tail -> next = p;
tail = p;
}
return head;
}
struct node *creat2(int n) //逆序建立链表
{
struct node *head, *p;
head = (struct node *)malloc(sizeof(struct node));
head -> next = NULL;
for(int i = 0; i < n; i++)
{
p = (struct node *)malloc(sizeof(struct node));
scanf("%d", &p -> data);
p -> next = head -> next;
head -> next = p;
}
return head;
}
void Delete1(struct node *&head, int n, int m) //删除指定元素 n输出长度
{
struct node *p, *q;
p = head;
while(p -> next != NULL)
{
if(p -> next -> data == m)
{
n--;
q = p -> next;
p -> next = q -> next;
free(q);
}
else
p = p -> next;
}
printf("%d
", n);
}
void Delete2(struct node *&head, int n) //删除重复元素 输出长度
{
struct node *p, *q, *t, *tail;
p = head -> next;
while(p)
{
q = p -> next;
t = p;
while(q)
{
tail = q;
if(p -> data == q -> data)
{
n--;
t -> next = q -> next;
q = q -> next;
free(tail);
}
else
{
q = q -> next;
t = t -> next;
}
}
p = p -> next;
}
printf("%d
", n);
}
void sortline(struct node *&head, int n) //链表排序
{
struct node *p, *q;
while(n--)
{
p = head -> next;
q = p -> next;
while(p -> next)
{
if(p -> data > q -> data)
{
int t = p -> data;
p -> data = q -> data;
q -> data = t;
}
p = p -> next;
q = q -> next;
}
}
}
struct node *unionline(struct node *head1, struct node *head2) //有序链表的归并
{
struct node *p1, *p2, *tail;
p1 = head1 -> next;
p2 = head2 -> next;
tail = head1;
free(head2);
while(p1 && p2)
{
if(p1 -> data < p2 -> data)
{
tail -> next = p1;
tail = p1;
p1 = p1 -> next;
}
else
{
tail -> next = p2;
tail = p2;
p2 = p2 -> next;
}
}
if(p1)
tail -> next = p1;
else
tail -> next = p2;
return head1;
}
struct node *split(struct node *head1) //单链表的拆分
{
int ji, ou;
ji = ou = 0;
struct node *head2, *p, *q;
head2 = (struct node *)malloc(sizeof(struct node));
head2 -> next = NULL;
p = head1 -> next;
head1 -> next = NULL;
q = p -> next;
while(p != NULL)
{
if(p -> data % 2 == 0)
{
ou++;
p -> next = head1 -> next;
head1 -> next = p;
}
else
{
ji++;
p -> next = head2 -> next;
head2 -> next = p;
}
p = q;
if(q != NULL)
q = q -> next;
}
printf("%d %d
", ou, ji);
return head2;
}
void output(struct node *head) //链表输出
{
struct node *r = head;
while(r -> next -> next != NULL)
{
printf("%d ", r -> next -> data);
r = r -> next;
}
printf("%d
", r -> next -> data);
}