菜鸟请教:c语言中怎么删除单链表中的某个节点

已知头结点为head,共18个节点,想删掉第9个
节点的形式为
typedef struct link
{
int data;
struct link * next;
}NODE;
希望能够把代码写出来,很急,谢谢

第1个回答  2010-11-08
//L为头结点指针;i为要删除的结点序号

void DelList(LinkList L,int i)//删除指定位置结点
{
Node *pre,*r;
int k=0;
pre=L;
if(i<1) return;
while (pre->next!=NULL&&k<i-1)
{
pre=pre->next;
k=k+1;
}
if (!(pre->next))
{
printf("删除结点位置不合法");
return;
}
else
{
r=pre->next;
pre->next=r->next;

free(r);
printf("删除成功\n");

return;
}
}
第2个回答  2010-11-08
NODE * x = head; NODE * y = 0;
int i = 0;
for(i = 0; i < 8; i++) x = x->next;
y = x->next;
x->next = y->next;
free(y);本回答被提问者采纳

请教数据结构C语言代码,删除以L为头节点的单链表中值为K的第一个...
假定链表节点定义为 typedef struct node{ int v; struct node *next;}Node, *List;那么函数可以写作 void del_node(List L, int k){ Node *p,*q; p=L; q=L->next; while(q) { if(q->v==k) { p->next = q->next; free(q); q=p->ne...

求C语言大神帮忙,一道数据结构题,删除单链表中最大和次最大的数,感激...
并使L指向此头节点 *\/if(!*L) \/* 内存分配失败 *\/exit (OVERFLOW);(*L)->next = NULL; \/* 指针域为空 *\/}\/* 判断单链表是否为空 *\/\/* 初始条件:单链表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE *\/status listIsEmpty (linkList L) {return L->next == NULL;...

数据结构代码(用C语言) 单链表的插入和删除
include <stdlib.h> typedef struct node { int nDate;struct node *pstnext;}Node;\/\/链表输出 void output(Node *head){ Node *p = head->pstnext;while(NULL != p){ printf("%d ", p->nDate);p = p->pstnext;} printf("\\r\\n");} \/\/链表建立 Node* creat(){ Node *head ...

用c语言实现单链表以及单链表的建立、清空、插入、删除、查找、修改等...
include <string.h>#include <stdio.h>#include <stdlib.h>struct st{long num; char name[20]; float score; struct st *next;};\/* 创建结点 *\/struct st *creat(){struct st *head=NULL,*p,*q;q=p=(struct st *)malloc(sizeof(struct st));scanf("%ld%s%f",&p->num,p->name...

用c语言调用实现带头结点的单链表的建立,插入,删除,查找的源代码
直接插入。小于的话,移动有序表后插入 int j= i-1; int x = a[i]; \/\/复制为哨兵,即存储待排序元素 a[i] = a[i-1]; \/\/先后移一个元素 while(x < a[j]){ \/\/查找在有序表的插入位置 a[j+1] = a[j]; j--; \/\/元素后移 } ...

C语言初始化单链表!
在单链表A中删除所有和单链表B中元素相同的结点 include "stdafx.h"include <stdio.h> include <malloc.h> define SIZE sizeof(struct node)struct node{ int data;struct node next;};void init(struct node LC){ int n;struct node Str,*p;p=(struct node )malloc(SIZE);Str=LC;printf("...

C语言 释放节点的问题
需要把他所指向的链表数据的地址赋值给指向当前链表数据地址的链表及节点。举个非程序形式的例子:A -> B -> C ->D 如果要删除B,并且保持链表结构正常的话 需要 一个中间变量 TMP B的地址赋值给TMP Tmp = B 由A获取C的地址 A = C 这时再删除B DEL B 就完成了 ...

C语言中删除一个数组怎么写
如果数组是有序的, 需要把后面的数据挨个挪上来占掉前一个的位置, 然后把整个数组长度的记录减1. 或者干脆用链表,别用数组了 如果数组是无序的, 可以把最后一个记录挪上来占掉要删除的这个记录位置,然后吧数组长度的记录减1

C语言编程——单链表的建立与维护,要求:由主函数调用单链表的建立、元素...
r->n=n;r->next=p;p0->next=r;p0=r;} void printl(link *head) \/\/输出 { link *p0,*p;p=head;while(p!=NULL){ p0=p;printf("%d\\n",p->n);p=p->next;} } void remov(link *p0,link *p) 删除 { p0->next=p->next;free(p);} ...

C语言初始化单链表!
链表 A中删除所有和 单链表 B中元素相同的结点 include "stdafx.h"include <stdio.h> include <malloc.h> define SIZE sizeof(struct node)struct node{ int data;struct node next;};void init(struct node LC){ int n;struct node Str,*p;p=(struct node )malloc(SIZE);Str=LC;printf("...

相似回答