1.链表就地逆置
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef struct Link
{
int elem;
struct Link *next;
}link;
//初始化
link *initLink()
{
link *p=(link*)malloc(sizeof(link));
link *temp=p;
int n;
printf("请输入链表的长度\n");
scanf("%d",&n);
printf("请输入您的链表\n");
for(int i=1;i<=n;i++)
{
link *a=(link*)malloc(sizeof(link));
scanf("%d",&a->elem);
a->next=NULL;
temp->next=a;
temp=temp->next;
}
return p;
}
//链表输出
void display(link *p)
{
link* temp=p;
while(temp->next)
{
temp=temp->next;
printf("%d",temp->elem);
}
printf("\n");
}
void daozhi(link *head)
{
link *p,*q;
p=head->next;
head->next=NULL;
while(p)
{
q=p;
p=p->next;
//头插法
q->next=head->next;
head->next=q;
}
}
int main()
{
printf("请输入您想要逆置的链表\n");
link *L=initLink();
daozhi(L);
printf("逆置后的结果为\n");
display(L);
return 0;
}
2.删除递增单链表中的重复元素
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef struct Link
{
int elem;
struct Link *next;
}link;
//初始化
link *initLink()
{
link *p=(link*)malloc(sizeof(link));
link *temp=p;
int n;
printf("请输入链表的长度\n");
scanf("%d",&n);
printf("请输入您的链表\n");
for(int i=1;i<=n;i++)
{
link *a=(link*)malloc(sizeof(link));
scanf("%d",&a->elem);
a->next=NULL;
temp->next=a;
temp=temp->next;
}
return p;
}
//链表输出
void display(link *p)
{
link* temp=p;
while(temp->next)
{
temp=temp->next;
printf("%d",temp->elem);
}
printf("\n");
}
void shanchu(link *L)
{
link *p,*q,*t;
q=L;
p=L->next;
while(p)
{
if(q==L||p->elem>q->elem)
{
q->next=p;
q=p;
p=p->next;
}
else
{
t=p;
p=p->next;
delete t;
}
}
q->next=NULL;
}
int main()
{
printf("请输入您想要处理的链表\n");
link *L=initLink();
shanchu(L);
printf("处理后的结果为\n");
display(L);
return 0;
}
3.链表合并,元素交错排列,新表用原表的内存空间
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef struct Link
{
int elem;
struct Link *next;
}link;
//初始化
link *initLink()
{
link *p=(link*)malloc(sizeof(link));
link *temp=p;
int n;
printf("请输入链表的长度\n");
scanf("%d",&n);
printf("请输入您的链表\n");
for(int i=1;i<=n;i++)
{
link *a=(link*)malloc(sizeof(link));
scanf("%d",&a->elem);
a->next=NULL;
temp->next=a;
temp=temp->next;
}
return p;
}
//链表输出
void display(link *p)
{
link* temp=p;
while(temp->next)
{
temp=temp->next;
printf("%d",temp->elem);
}
printf("\n");
}
void hebing(link *l1,link *l2)
{
link *p,*q,*t;
p=l1->next;
q=l2->next;
t=l1;
while(p&&q)
{
t->next=p;
t=p;
p=p->next;
t->next=q;
t=q;
q=q->next;
}
if(p)
{
t->next=p;
}
else
{
t->next=q;
}
delete l2;
}
int main()
{
printf("请输入您想要处理的链表1\n");
link *L1=initLink();
printf("请输入您想要处理的链表2\n");
link *L2=initLink();
hebing(L1,L2);
printf("处理后的结果为\n");
display(L1);
return 0;
}