[刷题] 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
posted @ 2020-04-06 09:15  cxc1357  阅读(120)  评论(0编辑  收藏  举报