c语言-双向链表删除尾节点失败

问题描述

双向链表删除尾节点失败

void Delete(DLNode *C,int x)
{
DLNode *p=C,*q;
while(p->next->data!=x&&p->next!=NULL)
{
if(p->next->data==x)
break;
p=p->next;
}
if(p->next==NULL)
{
return;
}
q=p->next;
p->next=q->next;
q->next->prior=p;
free(q);
}

解决方案

while(p->next->data!=x&&p->next!=NULL)
->
while(p->next!=NULL)

解决方案二:

while(p->next->data!=x&&p->next!=NULL)
{
if(p->next->data==x)
break;
p=p->next;
}

改为:

while(p->next->data!=x&&p->next->next!=NULL)
{
p=p->next;
}
if(p->next->data==x)
{
//p->next空间的相关操作
p->next=p->next->next; //删除节点
}

解决方案三:

if(p->next->data==x)
break;

这里跳出去了,你在这里进行删除操作

时间: 2024-07-30 10:46:19

c语言-双向链表删除尾节点失败的相关文章

C语言双向链表

原文:C语言双向链表 今天写了点双向链表的各种操作,写插入的时候费了点时间,不过,现在看来还是值得耗费那点时间去写的,这种小东西应该能信手拈来才行啊. 1 /*双向链表*/ 2 #include <stdio.h> 3 #include <string.h> /*strcmp(const char *,const char *) return 0 is equal*/ 4 5 typedef struct dulnode 6 { 7 char name[20]; 8 struct

Win8系统中文语言里添加英文输入法失败怎么解决?

  Win8系统中文语言里添加英文输入法失败怎么解决?           1.首先,在桌面上单击鼠标右键,选择"新建"-->"文本文档";复制下面代码到其中; 2.将此txt文件另存为可操作注册表的reg文件,依次选择记事本菜单栏的"文件"-->"另存为",确定好保存位置,然后在选择最下面的"保存类型"为"所有文件",在上面"文件名"一项填入:中文语言下

电脑删除文件夹失败提示system的权限怎么办?

  电脑删除文件夹失败提示system的权限怎么办?我们在删除一些系统上面的东西的时候,竟然会收到系统提示"您需要来自system的权限"这时候怎么办呢? 1.首先我们找到想要删除的文件夹,对着文件夹右键,选择邮件菜单最底下的属性功能 2.在弹出的对话框内,我们选择上面五个选项内的安全选项,然后再安全选项内,选择当前用户名的管理员 3.在当前用户的菜单下面点击编辑按钮,在弹出的对话框内允许这一项,在完全控制的小正方形内打勾,允许当前用户完全控制该文件夹 4.如图所示这时候回到安全选项就

c语言链表删除节点问题

问题描述 c语言链表删除节点问题 #include #define NUll 0#include struct stu{ char name[6]; int xuehao; int grade; struct stu next;};typedef struct stu STU;main(){ STU *p*p_start*p2*p_print*p_charu*p_charu2; int ixuehao; //输入 for (i=0;i { p=(STU *)malloc(sizeof(STU))

c语言-C语言数组删除指定数值问题....

问题描述 C语言数组删除指定数值问题.... int b; int a[5] = { 1, 2, 3, 4, 5 }; scanf_s("%d",&b); int r = 0; int i; for ( i = 0; i<5; i++){ if (b == a[i]){//要删除的数据 a[i] = r; } else{ printf("%dn",a[i]); } }//这样的话确实能删除一个数,但是如果我真的想把数值0肤赋值给数组中的元素呢?怎么办?

c语言字符串删除的问题

问题描述 c语言字符串删除的问题 将字符串s1中与字符串s2中匹配的字符删除,并输出. 我写的程序如下: #include main() { char s1[10],s2[10]; gets(s1); gets(s2); int i,j,k; for(i=k=0;s1[i]!='n';i++) { for(j=0;s2[j]!='n';j++) if(s1[i]!=s2[j]) s1[k++]=s1[i]; } s1[k]=''; for(i=0;s1[i]!='';i++) printf("%

c语言-C语言编程删除空格时出现问题,请解答?

问题描述 C语言编程删除空格时出现问题,请解答? for(i=0,j=0;i<=strnlen_s(pSend,capacity);++i) { if(*(pSend+i)==' ') judge=false; if(judge) { *(pSend + j++)=*(pSend+i); } } 以上方法无法删除空格. for(i=0,j=0;i<=strnlen_s(pSend,capacity);++i) { if(*(pSend+i)!=' ') *(pSend + j++)=*(pSe

c语言-C语言双向链表求中点

问题描述 C语言双向链表求中点 在双向链表中查找链表的中间节点,如果链表的长度为偶数,取左边的节点,如果链表长度为0,返回null,用函数实现 解决方案 伪代码 Node *m, *h; int m; while (h->next == null) { h = h->next; if (i++ % 2 == 0) m = m -> next; } return m; 解决方案二: 先遍历求长度 之后在求中间的结点 就行了 啊 时间复杂度o(n) 解决方案三: 定义两个指针,分别从两个端点

C语言双向链表的表示与实现实例详解_C 语言

1.概述: C语言中一种更复杂的链表是"双向链表"或"双面链表".其表中的每个节点有两个连接:一个指向前一个节点,(当这个"连接"为第一个"连接"时,指向空值或者空列表):而另一个指向下一个节点,(当这个"连接"为最后一个"连接"时,指向空值或者空列表) 一个双向链表有三个整数值: 数值, 向后的节点链接, 向前的节点链接 在一些低级语言中, XOR-linking 提供一种在双向链表中