首页 > 其他 > 详细

[Leetcode]Remove Nth Node From End of List随记

时间:2016-02-29 21:22:10      阅读:142      评论:0      收藏:0      [点我收藏+]

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

 

[Leetcode]Remove Nth Node From End of List随记

原文:http://www.cnblogs.com/lilylee/p/5228690.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!