单链表中查找结点p并删除结点p

问题描述

单链表中查找结点p并删除结点p
pointer *p*q=NULL;
p=find(headi+1);
cout<data< q->next=p;
q->next=p->next;
delete p;
}
网上的实现方法都是删除p的后继结点,我想直接删除p,按照我的想法上述语句应该是正确的,但是执行时候在q->next=p出显示又断点,怎么破 大神救我

解决方案

你应该从头结点开始遍历
比如说头结点为 L;
假设你要删的结点为p
设置一个 q=L;
m=q->next;
while(m->next!=null)
{
if(m==p)
{
q->next=m-next;
}
else
{
m=m->next;
q=q->next;
}
}

解决方案二:
coutnext=p;这里q都没初始化,还是null,怎么能q->next呢。

解决方案三:
coutnext=p;这里q都没初始化,还是null,怎么能q->next呢。

解决方案四:
如果 p 就是 head,那么直接 head = p->next。
否则先得把 q 定位到 p 得前面一个,然后才能 q->next = p->next。
如果 find 就是定位到第几个,就是 q = find(headi);否则你要把 q 从 head 开始遍历,一直到 q->next 是 p 为止,

解决方案五:
必须把q定位到p前面。若果p是头,q就是null如果不是头,q必须紧跟p的移动,且q始终是p的前一个

解决方案六:
要想删除P一定要先找到它的前一个节点。

解决方案七:
我说下思路啊、、你要准备2个指针,一个指查找的节点,一个指刚才那个节点的上一个节点。。列入H是指头节点,B是第二个节点(头节点后的),
那找到P节点时,应该是B指到P这个节点,H指P前面一个节点。。。现在只是找到了,下一步就是删除。
把P节点中下一个节点的地址赋值到H后面,就是H直接连接P后面那个节点就删除P了。。
不知道你懂了没

时间: 2024-09-16 05:00:58

单链表中查找结点p并删除结点p的相关文章

为什么不允许删除循环单链表中最后一个结点?如何解决?

问题描述 为什么不允许删除循环单链表中最后一个结点?如何解决? /*****************************************************/ /* 函数功能:建立一个空的循环单链表 / / 函数参数:无 / / 函数返回值:指向node类型变量的指针 / / 文件名:clnkinit.c,函数名init() / /****************************************************/ node init() /建立一个空的循环

数据结构实验之链表七:单链表中重复元素的删除

数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个). Input 第一行输入元素个数n:  第二行输入n个整数. Output 第一行输出初始链表元素个数:  第二行输出按照逆位序所建立的初始链表: 第三行输出删除重复元素后的单链表元素个数: 第四行输出删除重复元素后的单

单链表中main函数出现死循环

问题描述 单链表中main函数出现死循环 int main() { int choice;//选项 int n;//结点个数 int i;//位置 ElemType e; LNode *L; cout<<"选项:n1.创建n2.插入n3.删除n0.退出n请选择:"< cin>>choice; while(1) { switch(choice) { case 1: InitList_L(L);//单链表的初始化 cout<<"请输入结点

求有环单链表中的环长、环起点、链表长

1.判断单链表是否有环 使用两个slow, fast指针从头开始扫描链表.指针slow 每次走1步,指针fast每次走2步.如果存在环,则指针slow.fast会相遇:如果不存在环,指针fast遇到NULL退出. 就是所谓的追击相遇问题: 2.求有环单链表的环长   在环上相遇后,记录第一次相遇点为Pos,之后指针slow继续每次走1步,fast每次走2步.在下次相遇的时候fast比slow正好又多走了一圈,也就是多走的距离等于环长. 设从第一次相遇到第二次相遇,设slow走了len步,则fas

java实现单链表中是否有环的方法详解_java

这是一道微软经典笔试题,就是两个指针h1,h2都从头开始遍历单链表,h1每次向前走1步,h2每次向前走2步,如果h2碰到了NULL,说明环不存在:如果h2碰到本应在身后的h1说明环存在(也就是发生了套圈).     如果环不存在,一定是h2先碰到NULL:     如果环存在,h2与h1一定会相遇,而且相遇的点在环内:h2比h1遍历的速度快,一定不会在开始的那段非环的链表部分相遇,所以当h1,h2都进入环后,h2每次移动都会使h2与h1之间在前进方向上的差距缩小1,最后,会使得h1和h2差距减少

在Excel中查找重复数据与删除方法

俺用Excel管理学生的成绩,俺想把同名学生的成绩数据突出显示出来(改变字体和单元格填充颜色),俺用"条件格式"来实现. 1. 启动Excel 2003(基本版本相似),打开学生成绩表. 2. 同时选中数据所在的单元格区域(如B2至J2001),执行"格式→条件格式"命令,打开"条件格式"对话框. 3. 单击最左侧方框右边的下拉按钮,在随后弹出的下拉列表中选择"公式"选项,然后在后面的方框中输入公式:=COUNTIF($B$2

PHP在字符串中查找指定字符串并删除

$a = "abcababa";$count=strpos($a,"ab");$str=substr_replace($a,"",$count,2); 输出结果:cababa代码虽短,但也算是一个小算法!

PHP在字符串中查找指定字符串并删除的代码_php技巧

$a = "abcababa"; $count=strpos($a,"ab"); $str=substr_replace($a,"",$count,2); 输出结果:cababa 代码虽短,但也算是一个小算法!

C语言之单链表的插入、删除与查找_C 语言

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.要实现对单链表中节点的插入.删除与查找的功能,就要先进行的单链表的初始化.创建和遍历,进而实现各功能,以下是对单链表节点的插入.删除.查找功能的具体实现: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef int ElemType; /** *链表通用类型 *ElemType 代表自定义的数据类型 *struct