2021-09-17:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?

福大大 答案2021-09-17:

双指针。
1.创建虚拟头节点preHead,其next节点指向head。
2.右节点先走,遍历n+1个节点。
3.继续遍历,左右节点都指向next。
4.遍历完成后,左节点的next指向左节点的next的next。
5.返回preHead的next节点。
时间复杂度:O(N)。
空间复杂度:O(1)。

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

package main

import (
"fmt"
"strconv"
) func main() {
head := &ListNode{val: 1}
printlnListNode(head)
ret := removeNthFromEnd(head, 1)
fmt.Println("---------")
printlnListNode(ret)
} func printlnListNode(head *ListNode) {
for head != nil {
fmt.Print(strconv.Itoa(head.val) + ",")
head = head.next
}
fmt.Println("打印完成")
} type ListNode struct {
val int
next *ListNode
} func removeNthFromEnd(head *ListNode, n int) *ListNode {
preHead := &ListNode{val: -1}
preHead.next = head
right := preHead
left := preHead
for i := 0; i < n+1; i++ {
right = right.next
}
for right != nil {
right = right.next
left = left.next
}
left.next = left.next.next
return preHead.next
}

执行结果如下:


左神java代码

2021-09-17:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?的更多相关文章

  1. openquery链表删除时报错 “数据提供程序或其他服务返回 E_FAIL 状态”

    DELETE OPENQUERY (VERYEAST_COMPANY_MYSQL_CONN, 'SELECT * FROM company ') WHERE c_userid in(select c_ ...

  2. 【Java】 剑指offer(17) 在O(1)时间删除链表结点

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除 ...

  3. 链表习题(2)-一个集合用带头结点的单链表L表示,编写算法删除其值最大的结点。

    /*一个集合用带头结点的单链表L表示,编写算法删除其值最大的结点.*/ /* 算法思想:使用pre,p,premax,max四个指针,pre和p进行比较,premax和max进行最后的删除操作 通过遍 ...

  4. 链表习题(1)-设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点

    /*设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点*/ /* 算法思想:设f(L,x)的功能是删除以L为首结点指针的单链表中所有值等于x的结点, 则显然有f(L->next,x)的 ...

  5. leetcode-19:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

    /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * Lis ...

  6. 数据结构:DHUOJ 删除链表的顺数及倒数第N个节点

    删除链表的顺数及倒数第N个节点 作者: turbo时间限制: 1S章节: DS:数组和链表 题目描述: 可使用以下代码,完成其中的removeNth函数,其中形参head指向无头结点单链表,n为要删除 ...

  7. PTA 链表删除结点的题目测试

    链表删除结点 题目描述 输入一个正整数repeat(0 < repeat < 10),做repeat次下列运算: 输入一个正整数n(0 < n < 10)和一组( n 个 )整 ...

  8. c++ 链表删除重复的数据

    //List.h #include <iostream> typedef int dataType; struct Node{ Node():data(),pNextNode(NULL){ ...

  9. iOS回顾笔记(09) -- Cell的添加、删除、更新、批量操作

    iOS回顾笔记(09) -- Cell的添加.删除.更新.批量操作 项目中经常有对UITableViewCell做各种操作的需求: 添加一个新的cell 删除某行cell 刷新cell上某行数据(如修 ...

  10. 含头结点的单链表C++实现(包含创建,查找,插入,追加,删除,反转,排序,合并,打印,清空,销毁等基本操作)

    温馨提示:下面代码默认链表数据为字符型,本代码仅供参考,希望能对找到本随笔的人有所帮助! #include<iostream> using namespace std; typedef s ...

随机推荐

  1. 【Beat】Scrum Meeting 3

    时间:2021年6月28日 1.各个成员今日完成的任务以及贡献小时数 姓名 今日完成任务 贡献小时数 鑫 进行软件测试,修改bug 4 荣娟 进行软件测试,修改bug 4 亚楠 进行软件测试,修改bu ...

  2. MarkDown学习day1

    # Markdown学习 ## 标题: #+"空格"+标题名字 为一级为标题 ##+"空格"+标题名字 为二级标题 同理几级标题就是几个#,最多支持6级标题 # ...

  3. 利用easyExcel生成excel并上传文件服务器(单独设置表头)

    结合相关easyExcel的相关信息//上传服务器方法,返回url链接地址public String exportToMinIO(List<aaaDto> list) { String p ...

  4. leetcode medium 记录 51-100

      # Title Solution Acceptance Difficulty Frequency     92 Reverse Linked List II       40.3% Medium ...

  5. 3.错误代码C4996

    3.错误代码C4996 错误 C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s inst ...

  6. MyBatisPlus---DQL编程控制

    MP将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合. 一.条件查询 package com.itheima; import com.baomidou.mybatisplus.c ...

  7. 使用dataX收获的教训

    首先是安装dataX,安装非常简单,只需下载对应的压缩包即可. 下载地址:https://github.com/alibaba/DataX 首先我出现的第一个错误:命令提示符界面出现出现乱码. 解决方 ...

  8. 从pcap文件中提取pcma音频

    操作系统 :Windows10_x64 .CentOS 7.6.1810_x64 wireshark版本:3.6.12 Python 版本  :  3.9.12 一.背景描述 工作中有时候会遇到需要从 ...

  9. 7.远程代码执行漏洞RCE

    远程代码执行漏洞RCE 1.RCE Remote Code Execute 远程代码执行 Remote Command Execute 远程命令执行 2.危害 窃取服务器的敏感数据.文件 对电脑的文件 ...

  10. 任意Exe转ShellCode?

    之前写过一个远控,但一直在琢磨如何生成shellcode,今天偶然看见一个项目:sRDI,github上就有 这个项目主要就是将dll转成shellcode,于是我就想到了"写一个输出文件的 ...