DeleteNode

    xiaoxiao2025-03-04  10

    #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
    最新回复(0)