- 浏览: 63276 次
- 性别:
- 来自: 北京
-
最新评论
有头结点的情况,附加一个逆置
没有头结点的情况,还是有些不同的地方要注意的。
#include <stdio.h> #include <malloc.h> #define null 0 typedef struct Node{ int value; struct Node* next; }; //尾插 void create(struct Node* head){ //p是工作指针 struct Node* p = head; int i; for(i = 1; i<=1; i++){ p->next = malloc(sizeof(struct Node)); p->next->value = i; p->next->next = null; p = p->next; } } void print(struct Node* head){ struct Node* p = head->next; while(p){ printf("%d\t",p->value); p = p->next; } printf("\n"); } int delete(struct Node* x,struct Node* head){ struct Node* p = head->next; struct Node* pre = head; while(p){ if(p->value == x->value){ pre->next = p->next; free(p); return 1; }else{ pre = p; } p = p->next; } return 0; } void rev(struct Node* head){ if(head->next != null){ struct Node* p = head->next->next; struct Node* temp; struct Node* pre = head->next; pre->next = null; while(p){ temp = p; p = p->next; temp->next = pre; pre = temp; } head->next = pre; } } int main(int argc,char *argv[]){ struct Node* head = malloc(sizeof(struct Node)); head->value = -1; create(head); print(head); struct Node* x = malloc(sizeof(struct Node)); x->value = 1; delete(x,head); print(head); rev(head); print(head); return 0; }
没有头结点的情况,还是有些不同的地方要注意的。
#include <stdio.h> #include <malloc.h> #define null 0 struct Node{ int value; struct Node* next; }; //头插 struct Node* create(){ struct Node* head = null; int i; for(i = 1; i<=10; i++){ if(head == null){ head = malloc(sizeof(struct Node)); head->value = i; head->next = null; }else{ struct Node* p = malloc(sizeof(struct Node)); p->value = i; p->next = head->next; head->next = p; } } return head; } void print(struct Node* head){ struct Node* p = head; while(p){ printf("%d\t",p->value); p = p->next; } printf("\n"); } //注意这里想改变head指针的指向 必须传head的引用 所以是 Node** int delete(struct Node* x,struct Node** head){ struct Node* p = head; struct Node* pre = head; //被删除节点是第一个的时候要特殊处理 if((*head)->value == x->value ){ *head = (*head)->next; free(p); return 1; } while(p){ if(p->value == x->value){ pre->next = p->next; free(p); return 1; }else{ pre = p; } p = p->next; } return 0; } int main(int argc,char *argv[]){ struct Node* head = create(); print(head); struct Node* x = malloc(sizeof(struct Node)); x->value = 1; delete(x,&head); print(head); return 0; }
发表评论
-
求链表中间节点的值,检测链表的环
2012-07-27 14:19 860求链表中间节点的值,检测链表的环 int loop(st ... -
实习前记
2012-07-16 15:27 772经过回来一周的找工作,总体感觉就是很累啊,每天东跑西颠的。面了 ... -
php函数参数列表
2012-05-11 16:50 1433[size=medium] 1.直接传值 function ... -
php的ob_flush和flush
2012-05-10 21:20 1112php.ini中 output_buffering = of ... -
php读文件的4中方法。
2012-05-10 20:38 910fopen $fp = fopen("downl ... -
百度笔试算法题一道。
2012-05-10 15:02 999一个数组a[0-n-1],a[0-mid]和a[mid+1-n ... -
自己实现php UTF8中文字符串截取
2012-05-09 11:38 2887header("Content-type: te ... -
C与C++动态分配,释放内存的区别
2012-05-08 17:30 160661. malloc()函数 1.1 malloc的 ... -
nginx rewrite
2012-05-04 11:23 0http://blog.cafeneko.info/2010/ ... -
php magic method
2012-05-04 11:16 906php的魔术方法总结 php的魔术方法都是和类有关的。 ... -
诡异的 shell 08 bug
2012-04-30 01:11 803v=08 echo $v shell里以0开头的都会把它当作8 ... -
排序相关
2012-04-22 16:01 0排序分类 内排序: 交换式排序: ... -
php string
2012-04-22 11:33 973一.字符串类型 php一共有8中数据类型 ... -
简单的树的递归、非递归创建,前序中序后序遍历
2012-04-21 10:03 1078c语言写着还挺带感 #in ... -
php 深度优先递归输出路径下所有文件
2012-04-19 21:27 1529<?php $dir = " ... -
简单的栈
2012-04-19 21:14 708#include <stdio.h> #de ... -
简单的循环队列
2012-04-19 21:13 807#include <stdlib.h> ... -
KMP与BF,实现了一个非主流next函数
2012-04-19 20:16 931#include <stdlib.h> #i ... -
ip过滤问题
2012-03-22 21:09 0假设有很多段ip段属于教育网的,如何尽快辨别一用户ip是否属于 ... -
求三叉树高度
2012-03-18 17:05 3163有12345个结点的满3叉数的高度为_____写出计算过程 ...
相关推荐
单链表是一种基础的数据结构,常用于存储线性序列数据,其每个节点包含数据和一个指向下一个节点的指针。在单链表中,头部插入节点是常见的操作之一,尤其在面试和笔试中常被用来考察对数据结构的理解和编程能力。 ...
在本编程练习中,我们的目标是编写一个函数,该函数接受单链表的头指针和一个待删除的节点值作为参数,然后从链表中删除所有具有该值的节点。这个功能对于链表的维护和数据清理至关重要。 首先,我们需要理解链表的...
在本文中,我们将深入探讨如何实现C++编程中删除单链表倒数第n个节点的问题,这是一个典型的链表操作,对于理解和掌握数据结构中的链表至关重要。首先,我们需要了解单链表的基本概念,它的存储结构以及如何进行基本...
单链表是数据结构中的一种基础元素,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在本实验中,我们探讨了单链表的几个关键操作:逆转链表、在指定位置后插入新节点、删除特定节点以及查找节点。 ...
在本编程练习中,我们关注的是如何从单链表中删除一个特定的节点,而这个节点的指针作为函数参数传递。这涉及到对链表的操作,包括遍历、查找以及修改链表结构。下面我们将详细探讨这一主题。 首先,让我们了解...
内容概要:本文档详细介绍了如何在一个已知循环单链表中查找指定值x,并完成对含有这个值得节点的删除处理。具体来讲,首先确认待处理列表非空状态,再定义用于存储该待删除项及其前一元素的对象。接下来,利用一个...
本项目旨在通过C语言实现一个简单的学生成绩管理系统,涵盖了单链表、排序以及节点的增加和删除等核心概念。下面我们将详细探讨这些知识点。 一、单链表 单链表是一种线性数据结构,由一系列节点组成,每个节点...
单链表的建立、插入节点、删除节点、逆序、查找等等,希望了可以给你们带来帮助
本篇文章主要介绍如何使用C++来实现一个带有头节点的单链表。单链表是一种基本的数据结构,在计算机科学中有着广泛的应用,例如用于存储有序的数据集合或作为其他更复杂数据结构(如哈希表)的基础组件。 #### 类...
对给定的单链表 L ,设计一个算法,删除 L 中值为 x 的结点的直接前驱结点
数据结构中的单链表是一种基础且重要的数据组织方式,它由一系列节点组成,每个节点包含数据元素和指向下一个节点的指针。在这个“数据结构单链表实例一个简单的小程序”中,我们可以推测作者实现了一个用C语言编写...
单链表由一系列节点组成,每个节点包含数据元素以及指向下一个节点的引用,最后一个节点的引用通常为null,标志着链表的结束。 **一、单链表的结构** 1. **节点定义**:在单链表中,每个数据元素被称为节点。一个...
通过一个循环,不断地删除`p`所指向的当前节点,并让`p`指向下一个节点。当`p->next`为NULL时,说明已经到达链表尾部,删除操作完成。示例代码如下: ```c void remove(node *head) { int i = 0; // 统计删除结点...
一次遍历单链表删除倒数第n个节点的问题,跟删除某个节点的前一个节点是一个思路
该函数会创建一个空链表,然后插入几个节点,接着删除一个节点,最后打印出链表的所有节点信息。 本文详细介绍了如何创建包含学号、姓名节点的单链表,并实现插入和删除节点的操作。该单链表使用C++语言实现,节点...
删除节点需要找到待删除节点,然后更新其前一个节点的指针以跳过待删除节点。如果要删除的是头节点,需要创建一个新的头节点指向原头节点的下一个节点。 4. **查找操作**: 在单链表中查找特定值的节点,通常从头...
4. **删除节点**:如果发现`q->data`与`p->data`相同,则更新`q`前面节点的`next`指针使其跳过`q`,即`s->next = q->next`,然后释放`q`所占的内存,并更新`q`指向下一个节点。 5. **循环条件**:当`p`到达链表尾部...
- 删除指定位置的节点:找到要删除节点的前一个节点,更新其指针域指向要删除节点的下一个节点。 3. 查找节点: - 遍历链表直到找到目标节点或到达链表末尾。时间复杂度为O(n),其中n为链表长度。 4. 遍历链表:...
删除单链表中的特定节点,尤其是倒数第K个节点,是一个常见的操作,有助于理解链表的基本操作。下面将详细讨论如何在Python中实现这个功能。 首先,我们需要创建一个单链表类`LinkedListAlgorithms`,它包含一些...
删除单链表中的节点需要找到待删除节点的前一个节点,并更新其指针使其指向待删除节点的后一个节点。给定代码中实现了一个删除函数`delete_lb`,该函数同样接受三个参数:链表头结点`L`、删除位置`i`和返回被删除...