首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2021-02-09:如何删除一个链表的倒数第n个元素?

2021-02-09:如何删除一个链表的倒数第n个元素?

原创
作者头像
福大大架构师每日一题
修改于 2021-02-10 12:09:48
修改于 2021-02-10 12:09:48
1.2K0
举报

2021-02-09:如何删除一个链表的倒数第n个元素?

福哥答案2021-02-09:

1.创建虚拟头元素,虚拟头元素的Next指针指向头元素。

2.根据快慢指针求倒数第n+1个元素,假设这个元素是slow。

3.设置元素slow的Next指针。slow.Next=slow.Next.Next。

4.返回虚拟头元素的Next指针。

代码用golang编写,代码如下:

代码语言:txt
复制
package main

import "fmt"

type ListNode struct {
    Val  int
    Next *ListNode
}

func main() {
    head := &ListNode{}
    head.Val = 1

    head.Next = &ListNode{}
    head.Next.Val = 2

    head.Next.Next = &ListNode{}
    head.Next.Next.Val = 3

    head.Next.Next.Next = &ListNode{}
    head.Next.Next.Next.Val = 4

    ret := head
    for ret != nil {
        fmt.Print(ret.Val, " ")
        ret = ret.Next
    }

    fmt.Println("\r\n-------")
    k := 4
    fmt.Println("删除倒数第", k, "个元素后:")

    ret = DeleteNode(head, k)
    for ret != nil {
        fmt.Print(ret.Val, " ")
        ret = ret.Next
    }
}
func DeleteNode(head *ListNode, k int) *ListNode {
    preHead := &ListNode{}
    preHead.Next = head

    fast := preHead
    slow := preHead

    k++
    for k > 0 {
        fast = fast.Next
        k--
    }

    for fast != nil {
        fast = fast.Next
        slow = slow.Next
    }

    slow.Next = slow.Next.Next

    return preHead.Next
}

执行结果如下:

图片
图片

评论

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档