这个删除指定节点怎么不能删除所以元素,只能删除一个? 单链表删除指定节点
- c语言关于删除指定节点的问题,删除第i个节点
- 如何用jquery 删除兄弟节点内指定的元素,内容不可移除
- 此程序不能删除第一个结点,谁帮我修改一下此程序,使它可以删除第一个程序?谢谢!
- 为什么不能删除第一个节点 C++
c语言关于删除指定节点的问题,删除第i个节点
void Deletenode(int i,struct nu *head)
{
struct nu *p,*q;
int k;
for(k=1,p=head;k<i-1;p=p->next,k++);
//用这个循环找到第i-1个节点
q=p->next;
//q指向第i个节点
p->next=q->next;
//第i-1个节点和第i+1个节点连起来
free(q);
}
上面是正确代码。
因为p开始指向头节点,也就是第一个节点,那么移动一次,p指向是第二个节点;
所以你的代码 k=0,1,2,。。。,i-1,移动了i-1次,p已经指向第i个节点了,而不是指向i-1个节点。
并且是在执行完成代码后,再移动位置,k再加1
如何用jquery 删除兄弟节点内指定的元素,内容不可移除
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "www.w3./TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="www.w3./1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
<script language="javascript" src="/js/jquery-1.4.4.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function(){
$("#t tr").click(function(){
$("#t tr td").each(function(){
$(this).html($(this).text());
});
$("td",this).html("<font color='red'>" + $(this).text() + "</font>");
});
});
</script>
</head>
<body>
<table id="t">
<tr><td><font color='red'>内容不可移出</font></td></tr>
<tr><td><font color='red'>内容不可移出</font></td></tr>
<tr><td><font color='red'>内容不可移出</font></td></tr>
</table>
</body>
</html>
此程序不能删除第一个结点,谁帮我修改一下此程序,使它可以删除第一个程序?谢谢!
删除链表的操作比较特殊,应该传递链表头指针的指针,如下:
================================
#include "stdio.h" // 链表的删除,//这边还有问题
#include "string.h"
typedef struct teacher
{
char name[10];
char age[10]; //为什么这边的age 我用int 型的就不行呢?
struct teacher *next; //这种指针的类型是结构体类型,以后这个指针只能指向struct teacher这种类型
}TE;
TE *onelink(TE a[],int n) //要返回链表实际上就是要返回头指针,返回值的类型也是结构型;
{
int i;
TE *head; //这边的*head 也可以用其他任意字母来替代 如 *p;
head=&a[0];
for(i=0;i { a[i].next=&a[i+1]; } a[n-1].next=NULL; // 注意:这边的NULL 一定要大写; return head; } void outputlink(TE *head) //输出链表中所有结点; 这边的*head 也可以其他任意字母; { TE *p=head; //把链表的头赋给指针p; while (p!=NULL) { printf("%s\t%s\n",p->name,p->age); p=p->next; } } /* 首先删除单链表的结点时head结点是比较特殊的,因为它是单链表的头,也是单链表的入口, 所以,你要执行删除操作时应该考虑到第一个元素就是要删除的元素时的情况,此时,要对 "头"结点更改,所以,应该传入头结点的指针,即 TE ** 类型,把头结点指针的指针传递进去, 这样才能更改"头结点" */ TE *delbyage(TE **head,char age[]) //删除链表 { TE *p=*head,*front; //都要把头指针赋给另外定义的指针p,通过p来操作; while(p!=NULL) { if(strcmp(p->age,age)==0) //如果不相等就不执行这个if语句并把p向后移一个单位; { break; //这边的break语句不是很理解; /*这个while循环其实就是在从头结点开始往后一个结点一个结点地寻找每个结点的年龄是否与输入的年龄相同, 如果年龄相同的话,就认为找到了要找的结点,然后就使用break语句退出循环,此时指针p所指向的结点就是年龄 等于要查找的年龄的结点*/ } front=p; //把前一个指针保存起来; p=p->next; } /*此时的p指向准备要删除的结点,此时应该考虑到如果要删除的结点是头结点的情况,所以应该如下更改:*/ if ( p == *head)//如果头结点是要删除的结点 { *head = (*head)->next; return *head; } else if(p!=NULL) { front->next=p->next; } return *head; } void main() { TE a[5]={{"小白","3"}, {"小黑","5"}, {"小皇","54"}, {"小赖","78"}, {"小猪","46"} },*head; //这边定义了一个结构型的指针head; char age[10]; head=onelink(a,5); //创建链表; outputlink(head); //输出链表; printf("请输入一个年龄:"); gets(age); /*调用删除函数时应该传递head的地址(指针)*/ head=delbyage(&head,age); //我发现这个程序不能删除第一个结点;先放一边吧; outputlink(head); getchar(); } { Temp = Head; //将当前节点(要删除的头节点)保存在临时节点中 Head = Head->next; //将头节点的下一个节点设置为头节点 ::Head = Head; //并将这个节点设置为全局节点 delete Temp; cout<<"删除信息成功"<<endl; return; } 问题就出现在以上 你想把删掉的节点释放内存空间 但是 Temp = Head; 这个语句使得 Temp 、Head共同指向现有的链表 如果你将Temp 删掉 就相当于把你现有的链表删掉 所以会出现程序不正常的现象 void Delete(Book* Head,int Num) { //删除的节点为头节点时的判断 if(Head->p_Num == Num) //判断删除的是否是头节点 { Head = Head->next; //将头节点的下一个节点设置为头节点 ::Head = Head; //并将这个节点设置为全局节点 cout<<"删除信息成功"<<endl; return; } //搜索所有链表并删除指定的链表 while(Head) { if(Head->next == NULL) { cout<<"找不到要删除的编号"<<endl; return; } if(Head->next->p_Num == Num) { Head->next = Head->next->next; cout<<"删除成功"<<endl; return; } Head = Head->next; } cout<<"找不到要删除的数据"<<endl; } 以上删掉了Temp 就可以了 我也是刚刚学到链表 对于如何释放掉删除节点 也没想出来为什么不能删除第一个节点 C++