zoukankan      html  css  js  c++  java
  • 【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;
        }
    }
    

      

  • 相关阅读:
    软工实践个人总结
    pyqt5设置背景图片出现问题
    第04组 Beta版本演示
    2020系统综合实践 期末大作业 04组
    2020系统综合实践 第7次实践作业 04组
    2020系统综合实践 第6次实践作业 04组
    2020系统综合实践 第5次实践作业
    2020系统综合实践 第4次实践作业
    2020系统综合实践 第3次实践作业
    2020系统综合实践 第2次实践作业
  • 原文地址:https://www.cnblogs.com/zhstudy/p/6040857.html
Copyright © 2011-2022 走看看