• [刷题] 19 Remove Nth Node From End of List


    要求

    • 给定一个链表,删除倒数第n个节点

    示例

    • 1->2->3->4->5->NULL , n=2
    • 1->2->3->5

    边界

    • n是从0还是从1计
    • n不合法,负数或者大于链表长度如何处理

    思路

    • 遍历一遍计算链表长度,再遍历一遍删除倒数第n个节点
    • 使用两个指针同时移动,找到待删除节点的前一个节点

    实现

     1 struct ListNode {
     2     int val;
     3     ListNode *next;
     4     ListNode(int x) : val(x), next(NULL) {}
     5 };
     6  
     7 class Solution {
     8 public:
     9     ListNode* removeNthFromEnd(ListNode* head, int n) {
    10         
    11         assert( n>=0 );
    12         ListNode* dummyHead = new ListNode(0);
    13         dummyHead->next = head;
    14         
    15         ListNode* p = dummyHead;
    16         ListNode* q = dummyHead;
    17         for( int i = 0 ; i < n + 1 ; i ++ ){
    18             assert( q );
    19             q = q->next;
    20         }
    21         
    22         while( q != NULL){
    23             p = p->next;
    24             q = q->next;
    25         }
    26         
    27         ListNode* delNode = p->next;
    28         p->next = delNode->next;
    29         delete delNode;
    30         
    31         ListNode* retNode = dummyHead->next;
    32         delete dummyHead;
    33         
    34         return retNode;
    35     }
    36 };
    View Code

    相关

    • 61 Rotate List
    • 143 Reorder List
    • 234 Palindrome Linked List
  • 相关阅读:
    Exp8-Web综合
    Exp7-网络欺诈防范
    Exp6-MSF应用基础
    加密API学习
    Exp5 信息搜集与漏洞扫描
    Exp4-恶意代码分析
    Exp3-免杀原理
    Exp2-后门原理与实践
    leetcode 22括号生成 暴力法
    413 等差数列划分
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12640595.html
Copyright © 2020-2023  润新知