[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;
      }
}

 

posted @ 2016-02-29 19:32  上官筱儿  阅读(108)  评论(0编辑  收藏  举报