Example 5:
Input: head = [-3,5,-99], node = -3
Output: [5,-99]
Constraints:
-
The number of the nodes in the given list is in the range [2, 1000].
-
-1000 <= Node.val <= 1000
-
The value of each node in the list is unique.
-
The node to be deleted is in the list and is not a tail node
方法一:类似数组的元素删除算法。
方法二:下节点的值覆盖当前节点值,然后删除下一节点。
import com.lun.util.SinglyLinkedList.ListNode;
public class DeleteNodeInALinkedList {
// 方法一:
public void deleteNode1(ListNode node) {
ListNode p1 = node, p2 = node.next;
while (p2 != null) {
p1.val = p2.val;
if (p2.next == null)
p1.next = null;// help GC
p1 = p2;
p2 = p2.next;
}
}
// 方法二:
public void deleteNode2(ListNode node) {
node.val = node.next.val;
ListNode p = node.next;
node.next = p.next;
p = null;// help GC
}
}
import static org.junit.Assert.*;
import org.junit.Test;
import com.lun.util.SinglyLinkedList;
import com.lun.util.SinglyLinkedList.ListNode;
public class DeleteNodeInALinkedListTest {
@Test
public void test1() {
DeleteNodeInALinkedList obj = new DeleteNodeInALinkedList();
ListNode node1 = new ListNode(4),
node2 = new ListNode(5),
node3 = new ListNode(1),
node4 = new ListNode(9);
node1.next = node2;
node2.next = node3;
node3.next = node4;
obj.deleteNode1(node2);
assertEquals(“4 -> 1 -> 9”, SinglyLinkedList.print(node1));
}
@Test
public void test1_2() {
DeleteNodeInALinkedList obj = new DeleteNodeInALinkedList();
ListNode node1 = new ListNode(4),
node2 = new ListNode(5),
node3 = new ListNode(1),
node4 = new ListNode(9);
node1.next = node2;
node2.next = node3;
node3.next = node4;
obj.deleteNode2(node2);
assertEquals(“4 -> 1 -> 9”, SinglyLinkedList.print(node1));
}
@Test
public void test2() {
DeleteNodeInALinkedList obj = new DeleteNodeInALinkedList();
ListNode node1 = new ListNode(4),
node2 = new ListNode(5),
node3 = new ListNode(1),
node4 = new ListNode(9);
node1.next = node2;
node2.next = node3;
node3.next = node4;
obj.deleteNode1(node3);
assertEquals(“4 -> 5 -> 9”, SinglyLinkedList.print(node1));
}
@Test
public void test2_2() {
DeleteNodeInALinkedList obj = new DeleteNodeInALinkedList();
ListNode node1 = new ListNode(4),
node2 = new ListNode(5),
node3 = new ListNode(1),
node4 = new ListNode(9);
node1.next = node2;
node2.next = node3;
node3.next = node4;
obj.deleteNode2(node3);
assertEquals(“4 -> 5 -> 9”, SinglyLinkedList.print(node1));
}
@Test
public void test3() {
DeleteNodeInALinkedList obj = new DeleteNodeInALinkedList();
ListNode node1 = new ListNode(1),
node2 = new ListNode(2),
node3 = new ListNode(3),
node4 = new ListNode(4);
node1.next = node2;
node2.next = node3;
node3.next = node4;
obj.deleteNode1(node3);
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
]
[外链图片转存中…(img-1Z72QPlJ-1715550760654)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!