1.删除链表中的最大值的节点
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}node,*linklist;
linklist creat()
{
int x;
node *pnew,*q;
linklist h;
h=(linklist)malloc(sizeof(node));
h->next=NULL;
q=h;
printf("please input numbers(输-1回车结束):");
scanf("%d",&x);
while(x!=-1)
{
pnew=(node *)malloc(sizeof(node));
pnew->data=x;
pnew->next=q->next;
q->next=pnew;
q=pnew;
scanf("%d",&x);
}
return h;
}
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}node,*linklist;
linklist creat()
{
int x;
node *pnew,*q;
linklist h;
h=(linklist)malloc(sizeof(node));
h->next=NULL;
q=h;
printf("please input numbers(输-1回车结束):");
scanf("%d",&x);
while(x!=-1)
{
pnew=(node *)malloc(sizeof(node));
pnew->data=x;
pnew->next=q->next;
q->next=pnew;
q=pnew;
scanf("%d",&x);
}
return h;
}
int compare(linklist h)
{
{
linklist p,q;
int max;
p=h->next;
max=p->data;
q=p->next;
while(q!=NULL)
{
if(max<(q->data))
{
max=q->data;
}
q=q->next;
}
return max;
}
int max;
p=h->next;
max=p->data;
q=p->next;
while(q!=NULL)
{
if(max<(q->data))
{
max=q->data;
}
q=q->next;
}
return max;
}
void print(linklist h)
{
node *m;
m=h->next;
while(m)
{
printf("%5d",m->data);
m=m->next;
}
printf("\n");
}
{
node *m;
m=h->next;
while(m)
{
printf("%5d",m->data);
m=m->next;
}
printf("\n");
}
main()
{
linklist h;
node *q;
int n;
h=creat();
print(h);
printf("%5d",compare(h));
}
{
linklist h;
node *q;
int n;
h=creat();
print(h);
printf("%5d",compare(h));
}
2.删除从第k个节点起,长度为len的链表
#include<stdio.h>
#include<stdlib.h>
typedef struct N
{
int data;
struct N *next;
}Node,*linklist;
#include<stdlib.h>
typedef struct N
{
int data;
struct N *next;
}Node,*linklist;
linklist creat(){
linklist head,p,q;
int data;
head = (linklist)malloc(sizeof(Node));
head->next=NULL;
p=head;
scanf("%d",&data);
while(data!=-1){
q = (linklist) malloc (sizeof(Node));
q->data=data;
q->next=p->next;
p->next=q;
p=q;
scanf("%d",&data);
}
return head;
}
linklist head,p,q;
int data;
head = (linklist)malloc(sizeof(Node));
head->next=NULL;
p=head;
scanf("%d",&data);
while(data!=-1){
q = (linklist) malloc (sizeof(Node));
q->data=data;
q->next=p->next;
p->next=q;
p=q;
scanf("%d",&data);
}
return head;
}
linklist Delete(linklist head)
{
linklist p,q;
int k,len;
p=head;
q=head->next;
int i;
printf("请输入k和len:");
scanf("%d %d",&k,&len);
for(i=1;i<k;i++)
{
p=p->next;
q=p->next;
}
for(i=1;i<=len;i++)
{
p->next=q->next;
q=q->next;
}
return head;
}
{
linklist p,q;
int k,len;
p=head;
q=head->next;
int i;
printf("请输入k和len:");
scanf("%d %d",&k,&len);
for(i=1;i<k;i++)
{
p=p->next;
q=p->next;
}
for(i=1;i<=len;i++)
{
p->next=q->next;
q=q->next;
}
return head;
}
void print(linklist L)
{
linklist p;
p=L->next;
while(p)
{
printf("%3d",p->data);
p=p->next;
}
printf("\n");
}
{
linklist p;
p=L->next;
while(p)
{
printf("%3d",p->data);
p=p->next;
}
printf("\n");
}
int main(void)
{
linklist p,q;
printf("创建一个链表(遇-1结束):");
p=creat();
print(p);
q=Delete(p);
print(q);
return 0;
}
{
linklist p,q;
printf("创建一个链表(遇-1结束):");
p=creat();
print(p);
q=Delete(p);
print(q);
return 0;
}
3.有序链表合并
#include<stdio.h>
#include<stdlib.h>
typedef struct N
{
int data;
struct N *next;
}Node,*linklist;
#include<stdlib.h>
typedef struct N
{
int data;
struct N *next;
}Node,*linklist;
linklist creat(){
linklist head,p,q;
int data;
head = (linklist)malloc(sizeof(Node));
head->next=NULL;
p=head;
scanf("%d",&data);
while(data!=-1){
q = (linklist) malloc (sizeof(Node));
q->data=data;
q->next=p->next;
p->next=q;
p=q;
scanf("%d",&data);
}
return head;
}
linklist head,p,q;
int data;
head = (linklist)malloc(sizeof(Node));
head->next=NULL;
p=head;
scanf("%d",&data);
while(data!=-1){
q = (linklist) malloc (sizeof(Node));
q->data=data;
q->next=p->next;
p->next=q;
p=q;
scanf("%d",&data);
}
return head;
}
linklist merge(linklist p1,linklist p2)
{
linklist p,q,p3,r;
p=p1->next;
q=p2->next;
r=p3=p1;
while(p&&q)
{
if(p->data<=q->data)
{
r->next=p;
r=p;
p=p->next;
}
else
{
r->next=q;
r=q;
q=q->next;
}
}
if(p)
{
r->next=p;
}
else
{
r->next=q;
}
return p3;
}
{
linklist p,q,p3,r;
p=p1->next;
q=p2->next;
r=p3=p1;
while(p&&q)
{
if(p->data<=q->data)
{
r->next=p;
r=p;
p=p->next;
}
else
{
r->next=q;
r=q;
q=q->next;
}
}
if(p)
{
r->next=p;
}
else
{
r->next=q;
}
return p3;
}
void print(linklist L)
{
linklist p;
p=L->next;
while(p)
{
printf("%3d",p->data);
p=p->next;
}
printf("\n");
}
{
linklist p;
p=L->next;
while(p)
{
printf("%3d",p->data);
p=p->next;
}
printf("\n");
}
int main(void)
{
linklist p,q,r;
printf("创建第一个链表(遇-1结束):");
p=creat();
printf("创建第二个链表(遇-1结束):");
q=creat();
printf("合并后的链表为:");
r=merge(p,q);
print(r);
return 0;
}
{
linklist p,q,r;
printf("创建第一个链表(遇-1结束):");
p=creat();
printf("创建第二个链表(遇-1结束):");
q=creat();
printf("合并后的链表为:");
r=merge(p,q);
print(r);
return 0;
}