剑指offer--面试题18:删除链表的结点
来源:互联网 发布:手机淘宝网登录在哪里 编辑:程序博客网 时间:2024/06/05 00:21
#include<stdio.h> #include<malloc.h> typedef struct LNode { int data; struct LNode *next; }*LinkList; LinkList Create_List_Tail(int length) {//建立链表 LNode *L,*s,*r; //L指向头结点,r指向尾结点,s指向新添加结点 L=(LinkList)malloc(sizeof(LNode)); L->next =NULL;//头结点L->data不存东西 r=L; for(int i=0;i<length;++i) { s=(LinkList)malloc(sizeof(LNode)); scanf("%d",&s->data); r->next =s; r =s; } r->next =NULL; return L; //返回链表 } void PrintList(LinkList L) { LNode* pNode = L->next ; if(!pNode) printf("空表!\n"); while(pNode) { printf("%d ", pNode->data); pNode = pNode->next; } printf("\n"); } LNode *Find(LinkList L,int data){LNode *p=L->next ;while(p&&p->data !=data)p=p->next ;if(!p)printf("不存在!\n");return p;}void DeleteNode(LinkList L,LNode *p){if(!L||!L->next!=NULL)return;// 要删除的结点不是尾结点if(p->next!=NULL){LNode *q=p->next;p->data=q->data;p->next=q->next;free(q);}// 链表只有一个结点,删除头结点(也是尾结点)else if(L->next==p){free(p);L->next=NULL;}// 链表中有多个结点,删除尾结点else{LNode *q=L->next;while(q->next!=p)q=q->next;q->next=NULL;free(p);}}void main(){LinkList L;LNode *p;int length,data;printf("请输入元素个数:");scanf("%d",&length);L=Create_List_Tail(length);printf("打印链表:\n");PrintList(L);printf("请输入要删除的元素值:\n");scanf("%d",&data);p=Find(L,data);DeleteNode(L,p);printf("删除指定元素后的链表:\n");PrintList(L);}
#include<stdio.h> #include<malloc.h> typedef struct LNode { int data; struct LNode *next; }*LinkList; LinkList Create_List_Tail(int length) {//建立链表 LNode *L,*s,*r; //L指向头结点,r指向尾结点,s指向新添加结点 L=(LinkList)malloc(sizeof(LNode)); L->next =NULL;//头结点L->data不存东西 r=L; for(int i=0;i<length;++i) { s=(LinkList)malloc(sizeof(LNode)); scanf("%d",&s->data); r->next =s; r =s; } r->next =NULL; return L; //返回链表 } void PrintList(LinkList L) { LNode* pNode = L->next ; if(!pNode) printf("空表!\n"); while(pNode) { printf("%d ", pNode->data); pNode = pNode->next; } printf("\n"); } void DeleteDuplication(LinkList &L) { if(!L||!L->next) return; LNode* p1 = L; LNode* p2 = L->next ; while(p2 != NULL) { LNode *p3 = p2->next; if(p3 != NULL && p3->data == p2->data) { int value = p2->data; while(p2 != NULL && p2->data == value) { p3 = p2->next; free(p2); p2 = p3; } p1->next =p3; p2 = p3; } else { p1 = p2; p2 = p3 ; } } } void main(){LinkList L;LNode *p;int length,data;printf("输入链表长度:");scanf("%d",&length);L=Create_List_Tail(length);printf("原始链表为:: \n"); PrintList(L); DeleteDuplication(L);printf("删除重复元素后链表为:: \n"); PrintList(L); }
阅读全文
0 0
- 剑指offer--面试题18:删除链表的结点
- 剑指offer-面试题57:删除链表中重复的结点
- 剑指offer--面试题57:删除链表中重复的结点
- 剑指offer 面试题57 删除链表中重复的结点
- 剑指offer-面试题57-删除链表中重复的结点
- 剑指offer 面试题57 删除链表中重复的结点
- 【剑指Offer】面试题57:删除链表中重复的结点
- 剑指offer面试题57 删除链表中重复的结点
- 剑指offer面试题[57]-删除链表中重复的结点
- 【剑指Offer】面试题57:删除链表中重复的结点
- 剑指Offer面试题13[在O(1)时间删除表的结点]
- 剑指offer算法题之单链表的删除结点操作--面试题13:在O(1)时间删除链表结点
- [剑指offer][面试题13]在O(1)时间删除链表结点
- 《剑指Offer》面试题13:在O(1)时间删除链表结点
- 【剑指Offer学习】【面试题13 :在O(1)时间删除链表结点】
- 《剑指Offer》学习笔记--面试题13:在O(1)时间删除链表结点
- 剑指offer--面试题13:在O(1)时间删除链表结点--Java实现
- 《剑指Offer》面试题:在 O(1)时间删除链表结点
- shell中的特殊变量及用法
- 面向对象-继承
- prim算法——小根堆实现
- WebService集成Spring
- 从零开始玩转JMX(一)——简介和Standard MBean
- 剑指offer--面试题18:删除链表的结点
- bzoj 2281: [Sdoi2011]黑白棋 博弈论+动态规划+排列组合
- Linux下的shell进度条
- 一些资源以及读书总结
- mysql中类型长度以及text和varchar的区别
- Linux基础(2)
- Javascript实现三级联动
- 推送实现机制
- 【bzoj3173】【Tjoi2013】【最长上升子序列】treap+dp二分优化