CC150-链表3

实现一个算法删除链表中的某个结点,假定你只能访问这个这结点:

输入:单向链表a->b->c->d->e中的结点c

结果:不返回任何数据,但是该链表变为a->b->d->e

分析:

当结点为空或者是尾结点的时候,该算法实现不了。

定义一个临时的next指针指向要删除结点的后续,n的data移动到next的data

然后将n.next指向next.next

代码:

public static void deleteNode(LinkListNode n){
if(n==null||n.next==null) return;
LinkListNode next = n.next;
n.data = next.data;
n.next = next.next;
}

时间: 2024-08-16 04:47:16

CC150-链表3的相关文章

CC150 - 链表

1. 移除未排序链表中的重复节点: 方法1: 利用哈希表: 遍历一次,将所有元素的记录在哈希表中,利用哈希表记录节点是否重复 代码: public static void deleteDup(LinkListNode n){ HashMap<Integer, Boolean> map = new HashMap<Integer, Boolean>(); LinkListNode previous = null; while(n!=null){ if(map.containsKey(

cc150:实现一个算法来删除单链表中间的一个结点,只给出指向那个结点的指针

实现一个算法来删除单链表中间的一个结点,只给出指向那个结点的指针. 例子: 输入:指向链表a->b->c->d->e中结点c的指针 结果:不需要返回什么,得到一个新链表:a->b->d->e 解答 这个问题的关键是你只有一个指向要删除结点的指针,如果直接删除它,这条链表就断了. 但你又没办法得到该结点之前结点的指针,是的,它连头结点也不提供.在这种情况下, 你只能另觅他径.重新审视一下这个问题,我们只能获得从c结点开始后的指针, 如果让你删除c结点后的某个结点,那

cc150:实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针

实现一个算法来删除单链表中间的一个结点,仅仅给出指向那个结点的指针. 样例: 输入:指向链表a->b->c->d->e中结点c的指针 结果:不须要返回什么,得到一个新链表:a->b->d->e 解答 这个问题的关键是你仅仅有一个指向要删除结点的指针,假设直接删除它,这条链表就断了. 但你又没办法得到该结点之前结点的指针,是的,它连头结点也不提供.在这样的情况下, 你仅仅能另觅他径.又一次审视一下这个问题,我们仅仅能获得从c结点開始后的指针, 假设让你删除c结点后的

2.3---删除链表的结点,不提供头结点(CC150)

这里,注意如果是尾结点,那么无解. public class Solution { public void deleteNode(ListNode node) { //利用李代桃僵 // // if(node.next == null) // // { // // node = null;//error: node == null; // // } // else { node.val = node.next.val; node.next = node.next.next; } } }

2.1---删除链表中重复元素(CC150)

分成两种,1种开了额外空间,临时缓冲区,一种没有开 import java.util.HashSet; import java.util.Set; class ListNode{ int data; ListNode next; } public class Solution{ public static void main(String[] args){ ListNode head = new ListNode(); head.data = 1; ListNode node = new Lis

2.6---找有环链表的开头结点(CC150)

public ListNode detectCycle(ListNode head) { ListNode fast = head; ListNode slow = head; int flag = 0; ListNode intersection = null; while(fast != null && fast.next != null){ fast = fast.next.next; slow = slow.next; if(fast == slow){ intersection

Linked List Cycle leetcode II java (寻找链表环的入口)

题目: Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Follow up: Can you solve it without using extra space? 题解: 这个连同I都是很经典的题啦,刷CC150时候就折磨了半天. 其实就推几个递推公式就好..首先看图(图引用自CC150): 从链表起始处到环入口长度为:a,从环入口到Faster和Sl

Linked List Cycle leetcode java (链表检测环)

题目: Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using extra space? 题解: 这道题连带着II是很经典的,在看CC150时候,纠结这个问题纠结了很久.在读了很多网上资料还有书的讲解以及和别人讨论之后,对这个专题终于明白了. 这一问只需要判断链表是否有环. 当链表没有环时是很好判断的,让一个指针一直往后走,遇见null了自然就没有环. 而如

c语言动态链表的创建

创建动态连链表就是将一个个节点连接起来 (1)动态生成节点 (2)输入节点数据 (3)将节点链在一起 例: typedef struct Data { char num[20]; char name[10]; char sex; float english; float chinese; float math; }; typedef struct Node { struct Data data;//结构体类型//结构体嵌套 struct Node* next;//结构体指针型 }node,*Pn

算法学习——单链表快排

/**  * 以p为轴对start-end间的节点进行快排(包括start && 不包括end):  * 思路:  * 1.将头节点作为轴节点start,从start.next开始遍历,如果节点小于轴start的值,将该节点插入到轴节点后面:  * 2.将轴节点插入合适位置,即找到最后一个小于轴的节点,将该节点与轴节点值互换,此时就链表分为两部分,小于轴节点和大于轴节点:  * 3.递归的遍历2中两部分节点.  *   * @param p  * @param start  * @para