273.删除链表中的节点

97 篇文章 0 订阅
70 篇文章 0 订阅

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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值