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

举报
福大大架构师每日一题 发表于 2021/02/09 22:05:29 2021/02/09
【摘要】 福哥答案2021-02-09:1.创建虚拟头元素,虚拟头元素的Next指针指向头元素。2.根据快慢指针求倒数第n+1个元素,假设这个元素是slow。3.设置元素slow的Next指针。slow.Next=slow.Next.Next。4.返回虚拟头元素的Next指针。代码用golang编写,代码如下:```gopackage mainimport "fmt"type ListNode str...

福哥答案2021-02-09:

1.创建虚拟头元素,虚拟头元素的Next指针指向头元素。
2.根据快慢指针求倒数第n+1个元素,假设这个元素是slow。
3.设置元素slow的Next指针。slow.Next=slow.Next.Next。
4.返回虚拟头元素的Next指针。

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

```go
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
}
```
执行结果如下:


***
[评论](https://user.qzone.qq.com/3182319461/blog/1612827291)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。