博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode】19. Remove Nth Node From End of List
阅读量:6680 次
发布时间:2019-06-25

本文共 1205 字,大约阅读时间需要 4 分钟。

题目:

思路:如果链表为空或者n小于1,直接返回即可,否则,让链表从头走到尾,每移动一步,让n减1。

    1.链表1->2->3,n=4,不存在倒数第四个节点,返回整个链表

      扫过的节点依次:1-2-3

      n值得变化:3-2-1

    2.链表1->2->3,n=3

      扫过的节点依次:1-2-3

      n值得变化:2-1-0

    3.链表1->2->3,n=2

      扫过的节点依次:1-2-3

      n值得变化:1-0--1

  当走到链表结尾时:1.n>0,说明链表根本没有第n个节点,直接返回原链表;

           2.n=0,说明链表倒数第n个节点就是头结点,返回head.next;

           3.n<0,重新从头结点开始走,没移动一步让n加1,当n=0时,移动停止,当前移动到的节点就是要删除节点的前一个节点。因为如果链表长度是L,则倒数第n个节点的前一个结点就是L-n。第一次扫到链表末尾时,n的值变成n-L,当n不断加1直到为0时,第二次扫到的位置正好是第L-n个节点处。

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode removeNthFromEnd(ListNode head, int n) {        if(head==null||n<1){            return head;        }         ListNode cur=head;         while(cur!=null){             n--;             cur=cur.next;         }         if(n==0){             return head.next;         }         if(n<0){             cur=head;             while(++n!=0){//当n=0时移动停止,移动到的节点就是要删除节点的前一个节点                 cur=cur.next;             }             cur.next=cur.next.next;         }         return head;    }}

  

 

转载于:https://www.cnblogs.com/zhstudy/p/6040857.html

你可能感兴趣的文章
CurrentRowColor 选中行 颜色改变
查看>>
内容溢出显示省略号
查看>>
二维码(支持arc,苹果自带扫描,zbar扫描,二维码生成)
查看>>
更改matlab默认工作路径
查看>>
[转] EM算法
查看>>
在VS中折叠所有代码或展开所有代码
查看>>
JavaScript 书籍推荐(转)
查看>>
《活法》摘录一
查看>>
C/S和B/S结构区别整理
查看>>
python基础===理解Class的一道题
查看>>
Bootstrap3 概述
查看>>
Django中的APP
查看>>
Adobe:彻底解决Firefox与Flash插件卡顿
查看>>
source insight 使用说明
查看>>
Simplify Path
查看>>
JSP放入Jar包支持
查看>>
依赖注入Bean属性
查看>>
Android中的IPC方式
查看>>
计算机网络基础知识(待补充)
查看>>
工作5年半了,最近准备做一些工作的小结了
查看>>