在O(1)时间删除指定链表结点
#region 在O(1)时间删除指定链表结点
/// <summary>
/// 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
/// </summary>
/// <typeparam name="T"></typeparam>
class MyList<T> where T:IComparable
{
private T _data;
private MyList<T> _next; public T data
{
get { return _data; }
set { _data = value; }
}
public MyList<T> next
{
get { return _next; }
set { _next = value; }
} public MyList()
{
data = default(T);
next = null;
}
public MyList(T nodevalue)
{
data = nodevalue;
next = null;
}
public void Insert(MyList<T> head,MyList<T> node)
{
if (head == null)
{
head = new MyList<T>();
head = node;
}
else
{
node.next = head.next;
head.next = node;
}
}
public void Insert(MyList<T> head, T nodevalue)
{
MyList<T> temp = new MyList<T>(nodevalue);
if (head == null)
{
head = temp;
}
else
{
temp.next = head.next;
head.next = temp;
}
}
public void Delete(MyList<T> head, MyList<T> deleteNode)
{
if ((deleteNode==null)||(head==null)) return;
if (deleteNode == head)
{
head = null;
deleteNode = null;
}
else if (deleteNode.next == null)
{
MyList<T> pNode = new MyList<T>();
pNode = head;
while (pNode.next != deleteNode)
pNode = pNode.next;
pNode.next = null;
deleteNode = null;
}
else
{
MyList<T> pNext = new MyList<T>();
pNext = deleteNode.next;
deleteNode.data = pNext.data;
deleteNode.next = pNext.next;
pNext = null;
}
}
public void Print(MyList<T> head)
{
MyList<T> pNode = head;
while (pNode != null)
{
Console.Write(pNode.data + " ");
pNode = pNode.next; }
Console.WriteLine();
}
}
#endregion
class Test{
public void MyListTest()
{
MyList<int> head = new MyList<int>(1);
head.Insert(head,2);
MyList<int> WishDelete = new MyList<int>(4);
head.Insert(head, WishDelete);
head.Insert(head,3);
head.Print(head);
head.Delete(head,WishDelete);
head.Print(head);
}
}
class Program
{ static void Main(string[] args)
{
Test t = new Test();
t.MyListTest();
}
}
在O(1)时间删除指定链表结点的更多相关文章
- O(1)时间内删除指定链表结点
题目 给定单链表头指针和一个结点指针,定义一个函数在O(1)时间内删除该结点. 分析 对于上图实例链表(a)删除指针p有两种方式 思路1:(b)找到前一个指针pre,赋值pre->next = ...
- 在O(1)时间内删除单链表结点
// 在O(1)时间内删除单链表结点 /* 思考: 很显然链表是一个节点地址不连续的存储结构 删除节点一般很容易会想到是修改p节点的前一个节点的next为p->next 然而除非是双向链表,否则 ...
- 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法
有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...
- delphi获取文件的创建/修改时间、按时间删除指定文件下的文件
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrl ...
- 13:在O(1)时间删除单链表节点
题目:给定单项链表的头指针和一个节点指针.定义一个函数在O(1)时间删除该节点. 解析: 删除单向链表中的一个节点,常规做法是必须找到待删除节点的前一个节点才干实现.而这样做的时间复杂度是O(n).无 ...
- 每天一个小算法(4)----在O(1)时间删除指定结点
O(1)时间内删除结点的思路只能是复制该结点下一个结点的数据,然后删除该结点的下一个结点,来等效删除此结点. 需要注意的地方是删除头结点和尾结点的处理. #include <stdio.h> ...
- 在O(1)时间内删除单链表结点
给定单链表的一个结点的指针,同时该结点不是尾结点,此外没有指向其它任何结点的指针,请在O(1)时间内删除该结点. int deleteNode(LNode **head, LNode **node) ...
- php根据修改时间删除指定目录下文件
//$dir-文件地址,$files-存储返回数组,$type-查找文件类型组 public function read_dir($dir,&$files,$type) { if(!is_di ...
- 剑指offer13 在O(1)时间删除链表的结点
把下一个节点的值直接赋值给要删除的节点,然后删除下一个节点.当这样做会有两个bad case:被删除的链表结点的下一个结点为空指针,如果链表只有一个结点.其实链表只有一个结点应该属于下一个结点为空指针 ...
随机推荐
- 【前端】CSS雪碧
百度百科:http://baike.baidu.com/link?url=jblMCCF77bq7egbJ-9SudRmvXdwlQVVOq5D9MEEniQgJR-Lqanfrnjzwmgu7ato ...
- C语言,调试必备的DEBUG宏定义
1. #include <stdio.h> #include <stdarg.h> //仅仅是打印函数名字替换 DEBUG <--> printf #define ...
- Mirantis OpenStack HA
Mysql使用Galera做Active/Active集群,同时使用Pacemaker,因为Galera mysql用到了领导机选举机制quorum,所以控制节点至少三个 RabbitMQ使用mirr ...
- ECSHOP常用函数
lib_time.php gmtime() #获得当前格林威治时间的时间戳 /$0 server_timezone() #获得服务器的时区 /$0 local_mktime($hour = NULL ...
- 2014 HDU多校弟八场H题 【找规律把】
看了解题报告,发现看不懂 QAQ 比较简单的解释是这样的: 可以先暴力下达标,然后会发现当前数 和 上一个数 的差值是一个 固定值, 而且等于当前数与i(第i个数)的商, 于是没有规律的部分暴力解决, ...
- ubuntu中出现警告:Gtk-WARNING**: 无法在模块路径中找到主题引擎:“pixmap”
版本 ubuntu12.04 上一篇中提到使用中文输入法,但是我在使用的时候发现当我启动IBus的时候出现了警告,如图 这个如何是好呢? 最终万能的度娘告诉我这么解决 故障原因: gtk引擎出现了故障 ...
- 【转】介绍几个图论和复杂网络的程序库 —— BGL,QuickGraph,igraph和NetworkX
原文来自:http://blog.sciencenet.cn/blog-404069-297233.html 作复杂网络研究离不开对各种实际或模拟网络的统计.计算.绘图等工作.对于一般性的工作,我们可 ...
- 新买一款打印机hp5525N
11900 RMB 彩色.激光.彩打. 让法国的工艺工程师给改成法语的了.
- Java进阶05 多线程
链接地址:http://www.cnblogs.com/vamei/archive/2013/04/15/3000898.html 作者:Vamei 出处:http://www.cnblogs.com ...
- HDOJ1728 BFS【STL__queue_的应用】
STL__queue_的应用 调用的时候要有头文件: #include<stdlib.h> 或 #include<cstdlib> + #include<queue> ...