删除单向链表中的节点
前言
在单链表中只给定需要删除的节点(非尾节点),如何删除该节点,而且不断链。
一、删除单向链表中的节点
请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。
题目数据保证需要删除的节点 不是末尾节点 。
二、题解
将下一个节点的值与被删除的节点替换,然后有了删除下一个节点的条件,此时删除下一个节点,从而保证不断链。
package com.xhu.offer.tencent;
//删除单向链表中的节点
public class DeleteNode {
public void deleteNode(ListNode node) {
//不断将后面的值与前面的值替换,最后删除末节点
while (true) {
node.val = node.next.val;
if (node.next.next == null) break;
node = node.next;
}
node.next = null;
}
//把下一个节点作为傀儡
public void deleteNode2(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
// Definition for singly-linked list.
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
}
总结
1)思维不要固定,不一定要删除该节点才能变成删掉该节点的样子。
2)对于题中出现的知识,要回顾其有什么特点,回想各种数据结构有哪些,哪些能配合该题。如链表的特点、二叉搜索树的特点。否则利用不起给的已知条件,让解题变得更难甚至解不出题。
参考文献
[1]LeetCode 原题