#include<stdio.h>
#include<stdlib.h>
typedef struct LinkNode{
int val;
LinkNode* next;
}*LinkList;
//不带头结点
LinkNode* CreateLink(int n){
LinkList l=NULL;;
if(n<=0){
printf("链表为空\n");
return NULL;
}
l=(LinkNode*)malloc(sizeof(LinkNode));
if(!l){
printf("overflow!");
exit(1);
}
printf("请输入结点的值\n");
scanf("%d",&l->val);
l->next=NULL;
LinkNode *p,*q;
q=l;
for(int i=1;i<n;i++){
p=(LinkNode*)malloc(sizeof(LinkNode));
if(!l){
printf("overflow!");
exit(1);
}
printf("请输入结点的值\n");
scanf("%d",&p->val);
p->next=q->next;
q->next=p;
q=p;
}
return l;
}
void Print(LinkList l){
LinkNode *p;
p=l;
while(p){
printf("%3d",p->val);
p=p->next;
}
printf("\n");
}
//删除指定指针的节点: 中间节点 尾节点 只有一个节点
void DeleteNode(LinkNode** l,LinkNode *p){
if(l==NULL||p==NULL)
return;
if(p->next!=NULL){
LinkNode *q=p->next;
p->val=q->val;
p->next=q->next;
delete q;
}
else if(p==*l){
delete p;
p=NULL;
*l=NULL;
}
else{
LinkNode* q=*l;
while(q->next!=p)
q=q->next;
q->next=NULL;
delete p;
p=NULL;
}
}
LinkNode* RandomPointer(LinkList l,int n){
int j=rand()%n+1;
printf("%3d\n",j);
LinkNode* p=l;
for(int i=1;i<j;i++)
p=p->next;
return p;
}
LinkNode* PointedPointer(LinkList l,int n){
LinkNode* p=l;
for(int i=1;i<n;i++)
p=p->next;
return p;
}
void main(){
int n,j;
printf("请输入节点的个数\n");
scanf("%d",&n);
LinkList l=CreateLink(n);
Print(l);
if(l==NULL){
printf("链表为空\n");
return;
}
// 链表中有多个结点,删除中间的结点
//LinkNode* p=RandomPointer(l,n);
// 链表中有多个结点,删除尾结点
printf("输入删除第几个节点\n");
scanf("%d",&j);
LinkNode* p=PointedPointer(l,j);
DeleteNode(&l,p);
Print(l);
}
转载请注明原文地址: https://ju.6miu.com/read-1296859.html