带表头链表结点的删除

#include <stdio.h>

#include <stdlib.h>

#define N 9

typedef struct node

{

int data;

struct node *next;

}ElemSN;

ElemSN *Createlink(int a[],int n){

int i;

ElemSN *h,*p;

h=p=(ElemSN*)malloc(sizeof(ElemSN));

h->next=NULL;

for(i=0;i<N;i++){

p=p->next=(ElemSN*)malloc(sizeof(ElemSN));

p->data=a[i];

p->next=NULL;

}

return h;

}

void DelkeyNode(ElemSN*h,int key){

ElemSN *p,*delp;

for(p=h;p->next&&p->next->data-key;p=p->next);

if(!p->next)

printf("Not found!\n");

else {

delp=p->next;

p->next=delp->next;

free(delp);

delp=NULL;

}

}

void Printlink(ElemSN *h){

ElemSN *p;

for(p=h;p->next;p=p->next)

printf("%2d\n",p->next->data);

}

int main(void){

int a[N]={1,2,3,4,5,6,7,8,9};

int key;

ElemSN *head;

head=Createlink(a,9);

printf("key=");

scanf("%d",&key);

DelkeyNode(head,key);

Printlink(head);

}

原文地址:http://blog.51cto.com/13645380/2154832

时间: 2024-10-14 09:36:53

带表头链表结点的删除的相关文章

c链表结点的删除和添加

1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef char datetype;/*定义新的数据类型名*/ 4 typedef struct node 5 { 6 datetype date; 7 struct node *next; 8 }listnode; 9 typedef listnode *linklist; 10 int delete(linklist h,int num)/*删除结点*/ 11 { 12 linklis

链表(四)——带表头的单向链表

1.带表头的单向链表 (1)不带表头的单向链表在实现插入和删除时必须区分头结点和其他节点的处理. (2)使用带表头的单向链表的好处:不用考虑头结点的单独处理. 表头节点:数据域没有值,指针域指向单向链表中数据域含值的第一个结点. 2.代表头的单向链表的基本操作 #include <stdio.h> #include <malloc.h> #define NULL 0 typedef struct node { int data; struct node *next; }ElemSN

Python与数据结构[0] -&gt; 链表[0] -&gt; 单链表与带表头单链表的 Python 实现

单链表 / Linked List 目录 单链表 带表头单链表 链表是一种基本的线性数据结构,在C语言中,这种数据结构通过指针实现,由于存储空间不要求连续性,因此插入和删除操作将变得十分快速.下面将利用Python来完成单链表的实现. 1 单链表 不带表头的单链表通常形式如下, node_1 -> node_2 -> node_3 -> node_4 完整代码 1 class Node: 2 def __init__(self, val=None, nxt=None): 3 self.v

33.在O(1)时间删除链表结点

http://zhedahht.blog.163.com/blog/static/254111742007112255248202/ 题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点.链表结点的定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 函数的声明如下: void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted); 分析:这是一道广为流传的Googl

习题11-8 单链表结点删除 (20分)

习题11-8 单链表结点删除 (20分) 本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中所有存储了某给定值的结点删除.链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *deletem( struct ListNode *L, int m ); 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表

在O(1)时间删除链表结点

题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 链表结点与函数的定义如下: struct ListNode { int m_nValue; ListNode* m_pNext; }; void DeleteNode(ListNode** pListHead,ListNode* pToBeDeleted); 思路:我们可以很方便的得到要删除的结点的下一结点,如果我们把下一个结点的内容复制到需要删除的结点上覆盖原有的内容,再把下一个结点删除.就相当于把当前需要删除的

在O(1)时间删除链表结点——13

给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 因为要求时间复杂度为O(1),所以肯定不能遍历链表,那样的话时间复杂度就是O(N)了:可以想到,其实要求删除该结点,真正的目的并不是要将结点的数据包括结点所占的内存都给删除,只是想让数据消失就可以了,至于结点,除去任意一个结点所占的空间都是OK的: 所以,这里换一种思路,若要删除指定的结点,一般需要将前一个结点的next指针指向要删除结点的下一个结点,这样要删除的结点就可以脱离链表而被删除了,但这里关键就是即是单链表没有

C语言实现单链表节点的删除(带头结点)

我在之前一篇博客<C语言实现单链表节点的删除(不带头结点)>中具体实现了怎样在一个不带头结点的单链表的删除一个节点,在这一篇博客中我改成了带头结点的单链表.代码演示样例上传至 https://github.com/chenyufeng1991/DeleteLinkedList_HeadNode.删除类型有两种: (1)删除某个位置pos的节点: (2)推断x值是否在链表中,若存在则删除该节点: 核心代码例如以下: //删除某个位置pos的节点 Node *DeletePosNode(Node

两种删除单链表结点的实现,一种O(n),一种O(1)

常规的删除单链表结点的做法是挨个查找到该结点的前一个结点,然后去掉要删除的这个结点,回收内存.这个需要O(n)的时间. 有一种比较快速的删除掉链表指定一个节点的方法,就是把下一个结点的内容复制到当前这个结点,然后把下一次结点删除掉,这个需要考虑当要删除的结点是最后一个结点的情况. 如果刚好是最后一个结点,则需要O(n)的时间,如果不是最后一个结点,可以在O(1)时间内完成删除操作. 1 // 2 // main.c 3 // SingleListDeleteNode 4 // 5 // Crea