在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:被删除的链表结点的下一个结点为空指针,如果链表只有一个结点.其实链表只有一个结点应该属于下一个结点为空指针 ...
随机推荐
- 【NGROK】快速实现本地Web服务到外网的映射
NGROK官网:https://ngrok.com NGROK百科:http://baike.baidu.com/view/13085941.htm?fr=aladdin 使用ngrok(Window ...
- ios中利用NSDateComponents、NSDate、NSCalendar判断当前时间是否在一天的某个时间段内。
应用中设置一般会存在这样的设置,如夜间勿扰模式,从8:00-23:00,此时如何判断当前时间是否在该时间段内.难点主要在于如何用NSDate生成一个8:00的时间和23:00的时间,然后用当前的时间跟 ...
- VMware-WorkStation 去掉VM工具栏
链接地址:http://jingyan.baidu.com/article/8275fc86b95c6246a03cf629.html VMware 是目前用得最多的虚拟机.当开启虚拟机的全屏模式时, ...
- java面向对象中的String类中12种常用的方法
1.字符串与字符数组的转换 字符串可以使用toCharArray()方法变成一个字符数组,也可以使用String类的构造方法把一个字符数组变成一个字符串. public class StringAPI ...
- Week2(9月16日):动手做个简单的例子
Part I:提问 =========================== 1.什么是ASP.NET MVC? 2.MVC的英文? 3.什么是模型? 4.什么是控制器? 5.什么是视图? 6.ASP ...
- Calling 64-bit assembly language functions lodged inside the Delphi source code
Code: http://www.atelierweb.com/calling-64-bit-assembly-language-functions-lodged-inside-the-delphi- ...
- cocos2d-x游戏开发系列教程-超级玛丽02-代码结构
代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 前景回顾 上一篇博文提到超级马里奥的游戏效果,大家 ...
- 无线网络wifi (WPA/WPA2)密码破解方法
无线网络password破解WPA/WPA2教程 本教程用于探索无线路由安全漏洞,禁止用于非法用途,违者法律必究(与我无关) 在动手破解WPA/WPA2前,应该先了解一下基础知识,本文适合新手阅读 首 ...
- hpu第五届acm比赛
vijos P1211生日日数 描述 CCC老师的生日是YY年MM月DD日,他想知道自己出生后第一万天纪念日的日期(出生日算第0天). 格式 输入格式 从文件的第一行分别读入YY,MM,DD其中1 ...
- 闲扯 Javascript 01 实现选项卡
javascript 实现选项卡 今天下午的两节课,在机房闲来没事 ,就学习了javascript 怎么获取HTML的标签,改变CSS样式,资料来源 智能社! <script> windo ...