• 【LeetCode】19. Remove Nth Node From End of List


    题目:

    思路:如果链表为空或者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;
        }
    }
    

      

  • 相关阅读:
    python 序列化
    python 文件目录操作
    正则表达式 贪婪与非贪婪
    python StringIO&BytesIO
    正则表达式 1
    了解HTML表单之input元素的23种type类型
    JS数组reduce()方法详解及高级技巧
    react之组件的shouldcomponentUpdate使用&&Component与PureComponent
    react之setState面试题
    react之setState异步和同步问题
  • 原文地址:https://www.cnblogs.com/zhstudy/p/6040857.html
Copyright © 2020-2023  润新知