删除单链表(带头结点)的最小值结点
来源:互联网 发布:朱清时量子意识 知乎 编辑:程序博客网 时间:2024/05/22 06:50
题目:如题;
结果:
———-代码区
#include <stdio.h>#include <stdlib.h>#define ERROR NULLtypedef enum {false, true} bool;typedef int ElementType;typedef struct LNode *PtrToLNode;struct LNode { ElementType Data; PtrToLNode Next;};typedef PtrToLNode Position;typedef PtrToLNode List;List MakeEmpty();bool Insert( List L, ElementType X, Position P );void deleteMinNode(List L);int main(){ List L; ElementType X; Position P; int N; L = MakeEmpty(); scanf("%d", &N); while ( N-- ) { scanf("%d", &X); Insert(L, X, L->Next); } printf("before delete:\n"); for ( P=L->Next; P; P = P->Next ) printf("%d ", P->Data); printf("after delete:\n"); deleteMinNode(L); for ( P=L->Next; P; P = P->Next ) printf("%d ", P->Data); return 0;}List MakeEmpty(){ List L =(List)malloc(sizeof(struct LNode)); L->Next = NULL; return L;}/* 带头结点的插入 注意这里是倒序插入,测试的时候输入数据的时候要小心一下*/bool Insert( List L, ElementType X, Position P ){ /* 这里默认L有头结点 */ Position temp, pre; /* 查找P的前一个结点,这里最开始没想到for循环不需要写循环体内程序就可以了 */ for ( pre=L; pre&&pre->Next!=P; pre=pre->Next ) ; if ( pre==NULL ) { /* P所指的结点不在L中 */ printf("Wrong Position for Insertion\n"); return false; } else { /* 找到了P的前一个结点pre */ /* 在P前插入新结点 */ temp = (Position)malloc(sizeof(struct LNode)); /* 申请、填装结点 */ temp->Data = X; temp->Next = P; pre->Next = temp; //刚开始忘记写return true; return true; }}/*犯了几个错: 1、while循环的条件是while(cur != NULL ),不是while(cur->Next != NULL),如果用后者,那么最后一个结点的值没比较就被跳过了 2、要用到四个指针,否则不行: 第一,删除一个结点,必须要记录被删除结点的前驱; 第二,要用一个临时变量记录待删除的结点,这样才能free掉待删除的结点; 第三,要遍历结点,所以需要一个变量保存指针; 第四,保存遍历结点的前驱,以便赋给第一点;*/void deleteMinNode(List L){ if(L == NULL) return; List cur = L->Next,curPre = L,min = L->Next, minPre; while(cur!= NULL){ if(cur->Data < min->Data){ minPre = curPre; min = cur; } curPre = cur; cur = cur->Next; } minPre->Next = min->Next; free(min);}
0 0
- 删除单链表(带头结点)的最小值结点
- 不带头结点的单链表的删除
- 带头结点的单链表
- 带头结点的单链表
- 带头结点的单链表
- C语言实现单链表节点的删除(带头结点)
- LinkList_withHeadNode(带头结点的单链表)
- 带头结点与不带头结点的单链表-LinkList
- 单链表的实现(带头结点)
- 单链表的实现(带头结点)
- 单链表的创建--带头结点
- 带头结点的单链表实现
- 不带头结点的单链表
- 不带头结点的单链表
- 带头结点单链表的建立
- 带头结点的循环单链表
- 带头结点的单链表总结
- 单链表插入排序(带头结点与不带头结点)
- ListView 开发注意事项
- Eclipse : cannot connect to vm 问题解决
- Android MVP 详解(上)
- C#中属性和字段的区别
- View
- 删除单链表(带头结点)的最小值结点
- TCP、UDP以及HTTP的简单讲解
- 1096. Consecutive Factors (20)
- jQuery
- python环境配置
- poj 2236
- vue环境搭建
- 正则表达式
- php+mysql中迅速插入百万条测试数据的方法