【数据结构】尾插法建立单链表 以及删除操作

xiaoxiao2021-02-28  52

#include<stdio.h> #include<stdlib.h> struct ListNode { char data; struct ListNode* Next; }; //尾插法建立单链表 struct ListNode* CreateList() { char ch; struct ListNode* head,*r;//头指针,搜索指针; struct ListNode *s;//申请指针单元 head=NULL; //链表制空 ch=getchar(); while(ch!='\n') { s=(struct ListNode *)malloc(sizeof(struct ListNode)); s->data =ch; if(head=NULL) head=s;//头指针指向新插入的结点 else r->Next =s;//建立连接 r=s;//保存当前节点 ch=getchar(); } if(r!=NULL) r->Next =NULL; return head; } //删除 int Delete(struct ListNode * head,int i) { struct ListNode *p=head,*s; int j=1; //寻找第i个结点 使p指向它的前驱 while(p->Next !=NULL&&j<i-1) { p=p->Next ; j++; } if(j!=i-1) { printf("\n删除位置不合理"); return 0;//删除失败 } s=p->Next ;//s指向要删除i p->Next =p->Next ->Next;//删除i结点 free(s); return 1;//删除成功 } //主函数 +遍历链表 int main() { struct ListNode *q,*p; q=CreateList(); Delete(q,3); while(q) { printf("%c",q->data );//输出单链表节点数据 p=q->Next ;//p为q的后继结点 free(q); q=p; } printf("\n"); return 0; }
转载请注明原文地址: https://www.6miu.com/read-82080.html

最新回复(0)