zoukankan      html  css  js  c++  java
  • leetcode Remove Nth Node From End of List

    这个题如果按照正常想法,一般是两边遍历,第一遍是计算链表的长度;然后确定倒数第n个节点的正序号,然后访问即可。

    好一点的方法是找一个指针p指向头结点后的n+1个节点,然后同时对头结点和p向后移动,如果p=Null了,这时head指针就恰好指向倒数第n+1个节点。这里有个问题,假如n恰好等于链表的长度,显然这时head指针指向了head节点,并没有指向head节点的前驱,那代码中的这一句可以解决这个问题,即在没有到n+1判断就到了NUll即是这种情况。

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode *removeNthFromEnd(ListNode *head, int n) {
    12         ListNode *end = head;
    13     ListNode *F = head;
    14     int i = 0;
    15     while (end != NULL&&i<n+1)
    16     {
    17         end = end->next;
    18         i++;
    19         if (end == NULL&&i<n+1)
    20             return head = head->next;
    21     }
    22     while (end != NULL)
    23     {
    24         head = head->next;
    25         end = end->next;
    26     }
    27     head->next = head->next->next;
    28     return F;
    29 }
    30     };
  • 相关阅读:
    存在和本质
    数据库的日志机制
    【msql】关于redo 和 undo log
    乐观锁是基于比较的无锁并发控制机制
    两段锁协议和防止死锁的一次封锁法
    并发编程沉思录
    什么是B-Tree
    二叉树与b树的性能区别:计算、层级与io
    认知模型
    复杂性、认知与心理学
  • 原文地址:https://www.cnblogs.com/chaiwentao/p/4422295.html
Copyright © 2011-2022 走看看