zoukankan      html  css  js  c++  java
  • [Leetcode]Remove Nth Node From End of List随记

    No.19, Remove Nth Node From End of List

    输入为一个链表,需要删除第n个节点,返回删除后的链表。

    最直白的方法,先循环一遍记录该链表有多长,计算出应该删除的节点的前一个节点n+1位置,再从头循环,到该节点位置后,改变该节点的next到下一个节点的next上。如果是要去掉第一个节点,直接返回head.next。

    public class Solution {
          public ListNode removeNthFromEnd(ListNode head, int n) {
              ListNode node=head;
              int len=0;
              while(node!=null){
                  len++;
                  node=node.next;
              }
              node=head;
              if(len==n){
                  head=head.next;
                  return head;
              }
              while(len-n>1){
                  node=node.next;
                  len--;
              }
              node.next=node.next.next;
              return head;
          }
    }

    当然也可以用双指针,一个头指针,和一个距离头指针为n距离的指针。两个一起向后挪,直到后一个指针的next为null时,前面一个指针所指的位置即为要变更的位置。

    public class Solution {
               public ListNode removeNthFromEnd(ListNode head, int n) {
              ListNode n1=head;
              ListNode n2=head;
              for(int i=0;i<n;i++){
                  n2=n2.next;
              }
              if(n2==null){
                  return head.next;
              }
              while(n2.next!=null){
                  n1=n1.next;
                  n2=n2.next;
              }
              n1.next=n1.next.next;
              return head;
          }
    }
  • 相关阅读:
    2019年春第八周作业
    2019 第七周作业
    2019 第六周作业
    2019 第五周作业
    2019 第四周作业
    2019 第三周作业
    2019 第二周作业
    2019第一周编程总结2
    2019第一周编程总结1
    秋季学期学习总结
  • 原文地址:https://www.cnblogs.com/lilylee/p/5228690.html
Copyright © 2011-2022 走看看