删除单向链表中间的某个节点,假定你只能访问该节点

 1 /*
 2      * 在这个问题中你访问不到链表的首节点,只能访问那个待删除节点,其实我们可以这样想
 3      * 就是把后继结点的值复制到当前节点,当前节点的下一个地址指向后继结点的下一个地址
 4      * 把删除当前节点的问题转化为删除后继结点的问题
 5      * 在这里要注意以下,就是如果待删除的是链表的尾节点,则这个问题无解
 6      * */
 7     public static boolean deleteNode(Node node)
 8     {
 9         if(node==null || node.next==null)
10             return false;
11         Node n = node.next;
12         node.data=n.data;
13         node.next=n.next;
14         return true;
15     }
时间: 2024-08-25 00:49:06

删除单向链表中间的某个节点,假定你只能访问该节点的相关文章

删除单向链表中的某个节点

删除单向链表中的某个节点 链表的节点删除 在删除链表的节点步骤如下: 1.找到被删除节点的前面一个节点 2.将前面节点的next节点改成下一个节点 3.将被删除节点的内存释放 public class deleteNode { Node head; class Node { int data; Node next; Node(int d) { data = d; next = null; } } void deleteNode(int key) { // Store head node Node

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

原理: 1.若待删结点在单链表中间,则获取结点下一个结点的值,并复制给待删结点,然后删除待删结点的下一个结点. 2.若待删结点在单链表尾部,则顺序遍历单链表,删除. 3.若链表只有一个结点,正是待删结点,则删除之,并修改相关指针. 核心代码: //在O(1)时间删除结点.注:必须保证pDel为链表中的结点 void DeleteNode(List *list,pNode pDel) { if(*list == NULL || pDel == NULL) { return; } //不是最后一个节

【转】Linus:利用二级指针删除单向链表

原文作者:陈皓 原文链接:http://coolshell.cn/articles/8990.html 感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多,并加入了插图) Linus大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level coding. 下面是Linus的教学原文及翻译—— “At the opposite en

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

题目:给定单项链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点. 解析: 删除单向链表中的一个节点,常规做法是必须找到待删除节点的前一个节点才能实现,而这样做的时间复杂度是O(n),无法满足要求. 创新想法:当我们想删除一个节点时,并不一定要删除节点本身,可以用当前节点保存它下一节点的值,然后删除它的下一个节点. 情况案例: 1. 输入节点为NULL 2. 单链表只有一个节点,即删除头节点 3. 待删除节点是尾节点,即没有下一节点 4. 待删除不是尾节点 当待删除节点是尾节点时,

7.访问单个节点的删除

题目描述 实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点. 给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true 思想:前后节点,值复制 代码如下: import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Remove { public bo

实例讲解——单向链表(2)

深入链表的操作 将使用内部类,完成链表的操作! 一,链表的改进 之前已经实现了简单的单向链表,但是因为要用手工去处理各个节点的关系,这样肯定不行. 所以此处最好将节点的操作进行封装.这样用户操作就很方便了. 假设现在的节点操作有以下几种:增加数据,查找数据,删除数据. 特别强调的是,如果要删除节点的话,直接修改上一个节点就可以. 增加节点:就是在节点最后进行增加. 查找节点:就是依次递归的方式查找. 删除节点:就是改变引用传递地址. 在程序开发中,必须考虑两种情况: 1)第一次执行的时候,第一次

单向链表的简单实现

一.概念 单向链表是一种简单数据结构,由多个节点构成,每个节点里面保存了节点中的数据和指向下一个节点的引用,链表的第一个节点被称为根节点(root)或头节点(head) 二.使用Java实现基本结构 需要一个Node类和一个Link类,Node类中存放Node中保存的数据和下一个Node的指向,Link类中保存root节点. 1 class Node { 2 private String data; 3 private Node next; 4 public Node(String data)

链表(二):单向链表

一.什么是单向链表 在动态分配内存空间时,最常使用的就是“单向链表”(Single Linked List).一个单向链表节点基本上是由两个元素,即数据字段和指针所组成,而指针将会指向下一个元素在内存中的位置,如下图所示: 在“单向链表”中,第一个节点是“链表头指针”,指向最后一个节点的指针设为NULL,表示它是“链表尾”,不指向任何地方.例如列表A={a.b.c.d.x},其单向链表的数据结构如下图所示: 由于单向链表中所有节点都知道节点本身的下一个节点在哪里,但是对于前一个节点却没有办法知道

算法总结之 反转部分单向链表

给定单链表的表头节点head, 以及两个整数from 和 to, 在单向链表上把fro个节点到第to个节点这一部分进行反转 思路: 本题 有可能存在换头的问题,所以函数应该返回调整后的新的头节点 1 判断是否满足 1<=from<=to<=N 如果不满足,直接返回原来的头节点 2 找到第from-1个节点pre和第to+1个节点tPos,fPre即要反转部分的前一个节点,tPos是反转部分的后一个节点,把反转部分先反转,然后正确的链接fPre和tPos package TT; impor