码迷,mamicode.com
首页 > 其他好文 > 详细

2018.9.30 LeetCode 刷题日记 第19题

时间:2018-09-30 16:39:23      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:假设   code   设立   node   from   val   题型   rem   end   

题型比较经典,在一次遍历情况下完成单链表倒数第n个结点的删除:

设立三个结点:

cur 记录当前结点位置

ans 记录要删除的结点的前一个

h 记录链表的表头位置

假设要删除的是倒数第n个点(保证删除位置有效),则cur走到最后一个结点的时候,ans结点应该走到倒数n+1个结点,以便直接删除倒数第3个结点。

 

则 ans 为 cur 走了n个结点时才出发,保证cur对链表遍历结束时,ans.next 指向要删除的结点

最后返回删除该结点的表头 h

程序AC,但是有一种情况,就是如果长度为n的链表,删除倒数第n个点,原算法总是失败,只能对该情况使用返回h.next,,还未想明白

程序如下:

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
  public ListNode removeNthFromEnd(ListNode head, int n) {
    if(head.next == null){
      return null;
    }
    ListNode cur = new ListNode(0);
    ListNode ans = new ListNode(0);
    cur = head;
    ans.next = head;
    int count = 1;
    while(cur != null){
      if(count > n){
        ans = ans.next;
      }
      cur = cur.next;
      count ++;
    }
    if(ans.next == head) return head.next;  //ans没有动,长度为n 的链表删除倒数第n个结点,使用else内的删除无效
    else{
      ans.next = ans.next.next;
      return head;

    }
  }
}

2018.9.30 LeetCode 刷题日记 第19题

标签:假设   code   设立   node   from   val   题型   rem   end   

原文地址:https://www.cnblogs.com/tiansiyuan-program/p/9729570.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!