#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)时间删除指定链表结点的更多相关文章

  1. O(1)时间内删除指定链表结点

    题目 给定单链表头指针和一个结点指针,定义一个函数在O(1)时间内删除该结点. 分析 对于上图实例链表(a)删除指针p有两种方式 思路1:(b)找到前一个指针pre,赋值pre->next = ...

  2. 在O(1)时间内删除单链表结点

    // 在O(1)时间内删除单链表结点 /* 思考: 很显然链表是一个节点地址不连续的存储结构 删除节点一般很容易会想到是修改p节点的前一个节点的next为p->next 然而除非是双向链表,否则 ...

  3. 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法

    有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...

  4. delphi获取文件的创建/修改时间、按时间删除指定文件下的文件

    uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrl ...

  5. 13:在O(1)时间删除单链表节点

    题目:给定单项链表的头指针和一个节点指针.定义一个函数在O(1)时间删除该节点. 解析: 删除单向链表中的一个节点,常规做法是必须找到待删除节点的前一个节点才干实现.而这样做的时间复杂度是O(n).无 ...

  6. 每天一个小算法(4)----在O(1)时间删除指定结点

    O(1)时间内删除结点的思路只能是复制该结点下一个结点的数据,然后删除该结点的下一个结点,来等效删除此结点. 需要注意的地方是删除头结点和尾结点的处理. #include <stdio.h> ...

  7. 在O(1)时间内删除单链表结点

    给定单链表的一个结点的指针,同时该结点不是尾结点,此外没有指向其它任何结点的指针,请在O(1)时间内删除该结点. int deleteNode(LNode **head, LNode **node) ...

  8. php根据修改时间删除指定目录下文件

    //$dir-文件地址,$files-存储返回数组,$type-查找文件类型组 public function read_dir($dir,&$files,$type) { if(!is_di ...

  9. 剑指offer13 在O(1)时间删除链表的结点

    把下一个节点的值直接赋值给要删除的节点,然后删除下一个节点.当这样做会有两个bad case:被删除的链表结点的下一个结点为空指针,如果链表只有一个结点.其实链表只有一个结点应该属于下一个结点为空指针 ...

随机推荐

  1. 利用KVC使用自定义的控件

    KVC简单使用: 可以用来设置属性的值例如有个Person类下有个属性name [self setvalue:@"yourname" forkey:@"name" ...

  2. 【论文阅读】Retrieving Similar Similar Styles to Parse Clothing(相关工作)

    发表于2015年5月PAMI 作者: Kota Yamaguchi, M.Hadi Kiapour, Luis E. Ortiz, Tamara L. Berg 相关工作: [服装检索Clothing ...

  3. net core开发环境准备

    net core开发环境准备 1.1  安装sdk和运行时 浏览器打开网址https://www.microsoft.com/net/download, 到.Net Core下载页面. 根据操作系统, ...

  4. 在Eclipse/MyEclipse中安装spket插件

    Spket ide是强大的工具包为了JavaScript和XML的开发,这个强大的编辑器对JavaScript, XUL/XBLand Yahoo! Widget的开发都有全面的支持 ,比如代码完毕, ...

  5. C# 多媒体播放器

    //停止播放 public void stopFile() { axWindowsMediaPlayer1.Ctlcontrols.stop(); } //暂停文件 public void pause ...

  6. Linux下安装yum工具

    Linux下安装yum工具 http://blog.csdn.net/caoshichaocaoshichao/article/details/13171919

  7. DockerCon 2016

    DockerCon 2016 – 微软带来了什么?   根据Forrester的调查,接近半数的企业CIO在考虑IT架构的时候更乐于接受开源方案,这主要是基于低成本,避免供应商锁定和敏捷的需求:同时另 ...

  8. 相邻数字的基数等比确定进制问题pojg2972

    解决数制转换问题时,如果所给的数值不是用十进制表示的,一般用一个字符型数组来存放,数组的每个元素分别存储它的一位数字.然后按位转换求和,得到十进制表示,再把十进制转成成其他所求的进制表示.转成的结果也 ...

  9. UITableViewHeaderFooterView的使用+自己主动布局

    UITableViewHeaderFooterView的使用+自己主动布局 使用UITableView的header或footer复用时,假设採用自己主动布局,你会发现有约束冲突,以下这样写能够消除约 ...

  10. SPField的GetValidatedString方法没有被调用

    当我们开发自定义类型的Field时,可能会用到GetValidatedString这个方法. 但是有时候这个方法并没被调用 原因是: 当Field的Value为null时,该方法不会被调用 解决办法: ...