DeleteNode

来源:互联网 发布:中日建交 知乎 编辑:程序博客网 时间:2024/06/01 07:26
#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);}

0 0