【Golang】LeetCode-剑指Offer-面试题18-删除链表的节点

题目

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
注意:此题对比原题有改动

示例 1: 输入: head = [4,5,1,9], val = 5
输出: [4,1,9]
解释: 给定你链表中值为 5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof


代码

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func deleteNode(head *ListNode, val int) *ListNode {
    //情况1
    if head.Val==val{
        return head.Next
    }
    //情况2
    pre:=head   
    for head.Next.Val!=val{
        head=head.Next
    }
    head.Next=head.Next.Next
    return pre
}

解题思路

  • 情况1
    要删除的节点为头节点,直接返回后面的链表head.Next即可

  • 情况2

  1. 设置pre来保存前面的节点
  2. 遍历链表,直到找到要删除的节点后跳出循环
  3. 将head.Next指定为该节点的下一个链表即可,即head.Next=head.Next.Next。

图示思路

我用一张自制的图片来简单表示这种思路

【Golang】LeetCode-剑指Offer-面试题18-删除链表的节点_第1张图片


在LeetCode该题中,我也有提交题解,欢迎查看。昵称:Sakura。

你可能感兴趣的:(LeetCode力扣个人题解)