⑴ 删除节点(链表)
void
del(list
l){//这么个函数请大侠指教,删除头节点总是失败(原因见下)
node
*p,*q;
char
name[12];
不能向p分配
gets(name);
p=l;
while
(strcmp(name,p->name)
&&
p->next!=null)//循环查找
{
q=p;
p=p->next;
}
if(!strcmp(name,p->name))
{
if(p==l)
l=p->next;//删头节点,跟踪到这,l确实指向下一节点
else
q->next=p->next;//中间节点
printf("删除记录成功。\n");
不能释放p。。。。l是指向p的
}//
⑵ 如何删除一个链表的节点
将这个指针指向的next节点值到本节点,将next指向next->next,并随后删除原next指向的节点。
class node
{
public:
node(int x) : data(x), next(0){}
int data;
node* next;
};
void DelNode(node* pDel)
{
node* pTemp = pDel->next;
memcpy(pDel, pTemp, sizeof(node));
pDel->next = pTemp->next;
delete pTemp;
}
⑶ 【JS算法】 删除链表中某个节点
先来了解一个基础知识
b=a,但改变 b,并不会影响 a
y=x , 但改变y,会影响x,因为class有原型链
1=>2=>3,链表是由一组节点组成的集合。每个节点都使用一个对象的引用指向它的后继,指向另一个节点的引用叫做链
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
输入:head = [1,2,6,3,4,5,6] val = 6
输出:[1,2,3,4,5]
⑷ 关于链表尾节点的删除操作
问题出现在查找效率上
链表最常用的操作是在末尾插入节点和删除尾节点
在尾巴插入删除操作:
都需要知道他的前导而单链表要查找到最有一个元素需要遍历全部链表
双链表直接可以查到前导
最常用的操作实在最后一个元素之后插入一个元素和删除第一个元素
删除头结点需要头指针或者只用一个->next域就能查到速度就快了
在有第二个条件删除最后一个元素有尾指针就最好了可以直接找到尾巴元素同时他还是循环链表所以正好他的->next就是头结点
ok?
⑸ 怎样删除链表中的数据
如果链表表头不是设置成全局,可以用下面函数处理x0dx0a//删除节点 删除值为m的节点x0dx0a//*phead为表头指针x0dx0aint deleteNode(LinkList *phead,int m)x0dx0a{x0dx0aLinkList p,q;//p为值是m的节点,q是p的前一个节点x0dx0ax0dx0aif(*phead == NULL)//如果链表为空,做下溢处理x0dx0a{x0dx0aprintf("单链表为空!\n");x0dx0a return 0;x0dx0a}x0dx0aif((*phead)->data == m)//如果表头值为m,删除表头x0dx0a{x0dx0ap=*phead;x0dx0a*phead=(*phead)->next;x0dx0afree(p);//释放表头x0dx0a}x0dx0aelse//从第二个节点查找值是m的x0dx0a{x0dx0aq=*phead;x0dx0ap=(*phead)->next;x0dx0a//注意先p !=NULL,否则因没有于m等值的节点将出现非法访问操作x0dx0awhile(p !=NULL && p->data!=m )x0dx0a{x0dx0aq=p;x0dx0ap=p->next;x0dx0a}x0dx0ax0dx0aif(p!=NULL)//找到了x0dx0a{x0dx0aq->next=p->next;//让前一个节点指向p的后继节点x0dx0afree(p);//删除节点px0dx0a}x0dx0aelsex0dx0a{x0dx0aprintf("未找到值为%d的节点.\n",m);x0dx0areturn 0;x0dx0a}x0dx0a}x0dx0ax0dx0areturn 1;x0dx0ax0dx0a}
⑹ c语言结构体链表的节点删除问题 求助大佬
这个出错点在行 while() 循环之后的那一句: free(l->tail); 第一段程序,其实在 while() 循环里面已经把全部节点都释放了,包括尾节点,所以第一段程序不需要再释放一次 l->tail,只需要保留 l->tail = NULL; 即可。 第二段程序,因为最后一个...
2019-10-14回答者:隐世高手0074个回答
c语言中删除链表指定节点的一些问题?
问:struct student *Del (struct student *head, int num) { struct studen...
答:你仔细看看 while (p1->num != num && p1->next != NULL) 这一句之前的代码 p2什么时候赋值过? 而且if (p2 == head) //如果要删除的节点是第一个节点 既然是第一个节点,那么 while (p1->num != num && p1->next != NULL) 这个循环一次都没有执...
2015-10-20回答者:知道网友1个回答2
C语言数据结构的链表删除与查找问题~~,实在是被弄...
问:#include "stdlib.h" #include "stdio.h" typedef struct node{ //链表...
答:#include #include typedef struct LNode {char character; struct LNode*next; }LNode,*PLNode; PLNode CreateList()/*创建单链表*/ {PLNode P,head,q; int i; head=(PLNode)malloc(sizeof(LNode)); p=head; p->next=NULL; for(i=0;icharacter=...
2010-11-25回答者:qjbrh532个回答
C语言删除链表结点 结点结构如下
问:#define ELEMTYPE char typdef struct node { ELEMTYPE date; struct no...
答:我提供思路哈,你自己写一下,这个不难的。 分为两种情况: 1、删除的是头结点,这又可以分为两种情况:a)若是链表只有一个头结点,那么删除后头结点为NULL;b)若是链表不止一个节点,那么head指针指向头结点下一个节点。两种情况都要free 之...