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     };
  • 相关阅读:
    数据结构-查找-有序查找
    发现新大陆 --21lic
    专利检索
    IT行业新闻事件
    流量校准仪开发日志-2017-10-24
    电池充电方案总结
    iOS中创建自定义的圆角按钮
    iOS 内存管理实践
    iOS 内存管理策略
    [置顶] 内存管理一点也不神秘————手绘iOS内存管理细节
  • 原文地址:https://www.cnblogs.com/chaiwentao/p/4422295.html
Copyright © 2011-2022 走看看