273.删除链表中的节点
解题思路:
简单题,删除链表节点两种方式,1.利用前置节点。2.利用后置节点,本题用第二种
package leadcode;
import leadcode.lib.ListNode;
import leadcode.lib.ListNodeInit;
/**
* @author : icehill
* @description : 删除链表中的节点
* 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。
* 示例 1:
* 输入:head = [4,5,1,9], node = 5
* 输出:[4,1,9]
* 解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
* 示例 2:
* 输入:head = [4,5,1,9], node = 1
* 输出:[4,5,9]
* 解释:给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
* 提示:
* 链表至少包含两个节点。
* 链表中所有节点的值都是唯一的。
* 给定的节点为非末尾节点并且一定是链表中的一个有效节点。
* 不要从你的函数中返回任何结果。
* * 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/delete-node-in-a-linked-list
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
* 解题思路:
* 简单题,不要想复杂,题目意思是只给定一个节点,删除该节点,而且该节点不是尾节点
* 本来删除一个节点应该拿到它的pre节点,并把pre节点指向pre.next.next,
* 这里只能逆着来,直接把当前节点的值复制为next节点,并把当前节点指向next.next即可
* @date : 2021-05-02
*/
public class Solution273 {
public static void main(String[] args) {
int[] array = {4, 5, 1, 9};
//数组转换成链表来测试
ListNode head1 = ListNodeInit.initWhiteArray(array);
ListNode head2 = ListNodeInit.initWhiteArray(array);
//获取5
ListNode deleteNode1 = head1;
while (deleteNode1.val != 5) {
deleteNode1 = deleteNode1.next;
}
//获取1
ListNode deleteNode2 = head2;
while (deleteNode2.val != 1) {
deleteNode2 = deleteNode2.next;
}
//链表转换成数组打印
Solution273 solution273 = new Solution273();
solution273.deleteNode(deleteNode1);
System.out.println(ListNodeInit.changeToList(head1).toString());
solution273.deleteNode(deleteNode2);
System.out.println(ListNodeInit.changeToList(head2).toString());
}
public void deleteNode(ListNode node) {
//只给定被删除节点的情况下,删除该节点
ListNode next = node.next;
node.val = next.val;
node.next = next.next;
}
}