本文旨在对于个人知识的梳理以及知识的分享,如果有不足的地方,欢迎大家在评论区指出
题目描述
实现一种算法,删除单向链表中间的某个节点(即不是第一个或最后一个节点),假定你只能访问该节点。
示例:
输入:单向链表a->b->c->d->e->f中的节点c
结果:不返回任何数据,但该链表变为a->b->d->e->f
题目链接
题目分析
首先删除单向链表的某一个节点按照常规的思路就是先找到某个节点的前一个节点node
,之后node.next = node.next.next
就可以删除要删除的节点,这是一种方法,我们思考有没有另一种方法呢?
当然是有的~~,例如对于链表1 -> 3 -> 2 -> 5 -> 7
,我们要删除2这个节点,首先让5的值为2,也就是让链表变为1 -> 3 -> 2 -> 2 -> 7
,之后我们让要删除节点del.next = del.next.next
,这样链表最终就变成了1 -> 3 -> 2 -> 7
,也就做到了删除链表中的某个节点
解题代码
python:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteNode(self, node):
"""
:type node: ListNode
:rtype: void Do not return anything, modify node in-place instead.
"""
node.val = node.next.val
node.next = node.next.next
Java:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
}