博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从无头单链表中删除节点
阅读量:4570 次
发布时间:2019-06-08

本文共 1403 字,大约阅读时间需要 4 分钟。

/*****************************************************/

/*假设有一个没有头指针的单链表。一个指针指向此单链表**/
/*中间的一个节点,请将该节点从单链表中删除************/
/*****************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>

typedef struct Node

{
char value;
struct Node *next;
}Node;

void DeleteRandomNode(Node * pCurrent);

int main()

{
Node *first = (Node *)malloc(sizeof(Node));
Node *second = (Node *)malloc(sizeof(Node));
Node *thrid = (Node *)malloc(sizeof(Node));
Node *fourth = (Node *)malloc(sizeof(Node));

/*Init*/

first->value = 'A';
first->next = second;
second->value = 'B';
second->next = thrid;
thrid->value = 'C';
thrid->next = fourth;
fourth->value = 'D';
fourth->next = NULL;

printf("%c->%c->%c->%c\n",first->value,second->value,thrid->value,fourth->value);

DeleteRandomNode(second);

printf("%c->%c->%c\n",first->value,second->value,fourth->value);

return 0;

}

void DeleteRandomNode(Node * pCurrent)

{
assert(pCurrent != NULL);
Node *pNext = pCurrent ->next;
if(pNext != NULL)
{
pCurrent ->next = pNext ->next;
pCurrent ->value = pNext ->value;
delete pNext;
}
}

 

因为无头单链表没有头指针,所以无法由头指针追溯到待删除节点的前一节点。

所以此处用了“狸猫换太子”的方法把节点删除了。

核心就在

pCurrent -> Next = pNext -> Next;

pCurrent -> Data = pNext -> Data;

delete pNext;

 

这个实现没有创建单链表,只是直接创建了四个相连的节点。模拟出了无头单链表中节点的删除。

注意要为指向结构体的指针分配内存空间,要不运行时会报错。

在函数调用里面申请的内存也要delete掉。

转载于:https://www.cnblogs.com/guotao/archive/2012/08/15/2640377.html

你可能感兴趣的文章
一道面试题及扩展
查看>>
Unity 3D 我来了
查看>>
setup elk with docker-compose
查看>>
C++ GUI Qt4学习笔记03
查看>>
Java基础回顾 —反射机制
查看>>
c# 前台js 调用后台代码
查看>>
2017-02-20 可编辑div中如何在光标位置添加内容
查看>>
$.ajax()方法详解
查看>>
jquery操作select(增加,删除,清空)
查看>>
Sublimetext3安装Emmet插件步骤
查看>>
MySQL配置参数
查看>>
全面理解Java内存模型
查看>>
存储过程
查看>>
生成器
查看>>
将一个数的每一位都取出来的方法!
查看>>
2) 十分钟学会android--建立第一个APP,执行Android程序
查看>>
面试题8:二叉树下的一个节点
查看>>
hash冲突的解决方法
查看>>
Asp.Net webconfig中使用configSections的用法
查看>>
mysql 二进制日志
查看>>