237.Delete Node in a Linked List
-
问题描述
编写一个函数来删除单链表中的一个节点(除了尾部),只给出对该节点的访问。给定链表-Head=[4],[5],[1-9],如下所示:
4 -> 5 -> 1 -> 9
Input: head = [4,5,1,9], node = 5
Output: [4,1,9]
Input: head = [4,5,1,9], node = 1
Output: [4,5,9]
-
思路解法
1.链表由结点构成,Java需要创建结点对象,对象属性有结点值,和下一个结点的引用。2.知道要删除的结点时,由于改链表是单向链表,只能知道该节点的下一个结点,因此不能用该节点的上一个结点的引用,指向该节点的下一个结点。
3.由于知道了该节点的信息我们就可以得到该节点之后的所有结点的信息,我们可以不用直接删除该节点,或者说删除不了该节点,但我们可以删除下面的结点,所以让该节点对象里的值和下一个几结点的对象引用被该节点的下一个结点覆盖后,再删除该节点的下一个结点,就能完成任务。
- 代码
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;
}
}
- 总结
1.对于链表的结点删除操作有很多方法,其中包括知道删除的结点的前一个结点的引用,直接将该节点的下一个结点的引用赋值要删除的结点的前一个结点的引用。
2.对于该类题目给我们提供了删除结点的其他思路