删除单链表某个节点,请教C语言如何删除不带首结点链表的特定结点

3783℃ 严丽琴

//L为头结点指针;i为要删除的结点序号void DelList(LinkList L,int i)//删除指定位置结点{ Node *pre,*r; int k=0; pre=L; if(inext!

删除单链表某个节点,请教C语言如何删除不带首结点链表的特定结点

如果链表比较长,即使传入头结点的指针,也有办法 比如 typedef struct LNode { int d; struct LNode* next; } *PNode,*LinkList; 这个是不能删除只有一个头节点链表的;int ...

假如链表为双向链表,并且已知待删除元素为(node)p,则 int nodedel(node* p) { p->next->prev = p->prev; p->prev->next = p->next; return 0; }当然,这样会使链表中间出现一个空洞,如果不是动态分配内存,推荐准备一个内存整理函数

删除单链表某个节点

删除单链表某个节点,请教C语言如何删除不带首结点链表的特定结点

temp=p; p=p->next; temp->next=NULL; 这三句存在问题,temp=p,让temp指向p所指向的节点,p=p->next,p指向后移 temp->next=NULL,让temp的后继为空,这里出了问题,链表从temp指向的节点断开,相当于删除p之后的所有节点.应该先判断p是不是最后节点 if(p->next==NULL) 如果是,只好去找p的前趋pre,让pre->next=NULL,free(p) 如果不是最后节点,将p的后继节点数值域复制给p,然后将p的后继节点删除,等同与删除p p->data=p->next->data; p->next=p->next->next; free(p);

//L为头结点指针;i为要删除的结点序号void DelList(LinkList L,int i)//删除指定位置结点{ Node *pre,*r; int k=0; pre=L; if(inext!

1. 遍历到所要删除的结点2. 用中间变量存放要被删除的结点3. 将要被删除的结点的前后结点连接起来4. 释放要被删除的结点的内存 假设head为头结点 void deleteNode(List *head, DataType x) { if(head == NULL) return ; while(head->next != NULL) { if(head->next->data == x) break; head = head->next; } struct List *temp = head->next; head->next= temp->next;free(temp); }

单链表删除第i个节点

删除单链表某个节点,请教C语言如何删除不带首结点链表的特定结点

头结点是第一结点,只是一般没有数据头结点后面是首元结点,即第一个存放数据的结点做删除操作时,一般需要返回所删除结点的数据,所以一般不删除头结点如果你执意要删的话,当然也可以,因为链表分为有头结点的链表和无头结点的链表

#include <stdio.h>#include <stdlib.h>#include <string.h> struct TLink { int data; struct ... printf("从第4个元素开始删除3个节点:\n"); del(&r, 4,3); print(r); return 0; }/*end ...

有分才有动力啊哥们.删除节点很简单,以单链表为例,牢记三点1. 避免断链,删除掉节点后,前一个节点的p->next一定要指向后一个节点(如果是头节点,记得要将新表头P指向到原来的第二个节点.如果是尾节点,记得要将新的尾节点p->next置为NULL,).2. 避免野指针,删除掉节点后,p->next=NULL;3. 避免内存泄漏,删除的节点,要用free释放堆内存.如果是双向链表,不过是多了一个对prev操作,道理是一样的.

单链表删除值为x的节点

删除单链表某个节点,请教C语言如何删除不带首结点链表的特定结点

#include<stdio.h> #include<malloc.h> typedef struct node{ int data; struct node*next; }... return head; } list * delet_value(list *head, int x)//带头结点 { list *pre, *p; pre= head; p = ...

先找到这个节点.然后让它的

jj

数据结构链表删除节点

只学过c语言,尝试c语言写一下.让x节点的前置节点的向后指针域指向x节点的向后指针域指向的节点;让x节点的后续节点的向前指针域指向x节点的向前指针域指向的节点;释放x节点;p->llink->rlink= p->rlink; p->rlink->llink= p->llink; free(X); 当然,如果双向链表不是循环链表,带头指针这些,还需要考虑X节点作为第一个节点或者最后一个节点的特殊情况.

按照你传入的参数来看,你的实现的功能是在链表当中删除Number的值为num的结点,但是你的第一个循环只是做了遍历,并没有判断是否相等的相关操作,而且,一般...

把所有的K接点置空(单) 把和K节点相连的节点的后继连到不是K节点的前驱上(循环)思路就这样 要有图好才好写程序.很就没写那种程序了都忘得差不多了 你自己写写看吧

单链表结点删除

用循环 找到要删除的节点 比如要删除的是P 那么定义一个新的 指针 指向P,比如说Q,那么 现在P Q都指着你要删除的节点 再定义一个 指向P前面那个,比如说是S 那么把Q的NEXT赋给S,那么S就连到你要删除的那个节点后面一个节点了 再DELETE P就可以了 算法就 像我说的一样写 就可以了

既然是带头结点的非空单链表,那删除首元结点还不简单么. 只要将头结点的指针域指向首元结点的下一个结点就行了,释放,就行了. 例如,L是头结点的指针,next是结点的指针域.那就是 L-next = s-next;delete s;这样就搞定了.

1. 遍历到所要删除的结点2. 用中间变量存放要被删除的结点3. 将要被删除的结点的前后结点连接起来4. 释放要被删除的结点的内存 假设head为头结点 void deleteNode(List *head, DataType x) { if(head == NULL) return ; while(head->next != NULL) { if(head->next->data == x) break; head = head->next; } struct List *temp = head->next; head->next= temp->next;free(temp); }