leetcode第19題Remove Nth Node From End of List
この問題を見ると本能的な反応は針とチェーン時計に慣れていないので、毛皮しか知らないので、あまり練習していません.この問題に関する知識点がたくさんあるので、一つ一つ説明します.
1、leetcode上でチェーンテーブルでテストを行う場合のフォーマットは[12 3 4 5]である.
2、C++ポインタの詳細:ポインタ(この文章は特に役に立つので、よく見て、理解することが一番重要です)
C++のNULLの使い方:NULL
3、このテーマのポイントは状況を分けて討論することであり、最大の分水領は私が削除するこのノードが頭の結点であるかどうかであり、この2つの状況はそれぞれ対応しなければならない.しかも問題の要求は1つのサイクルしか使えない.
4、チェーンテーブルを削除するノード:deleteチェーンテーブルを削除するノード
コード:
1、leetcode上でチェーンテーブルでテストを行う場合のフォーマットは[12 3 4 5]である.
2、C++ポインタの詳細:ポインタ(この文章は特に役に立つので、よく見て、理解することが一番重要です)
C++のNULLの使い方:NULL
3、このテーマのポイントは状況を分けて討論することであり、最大の分水領は私が削除するこのノードが頭の結点であるかどうかであり、この2つの状況はそれぞれ対応しなければならない.しかも問題の要求は1つのサイクルしか使えない.
4、チェーンテーブルを削除するノード:deleteチェーンテーブルを削除するノード
コード:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution{
public:
ListNode *removeNthFromEnd(ListNode *head, int n){
if(head==NULL) //C++ NULL ,
return NULL;
int list_length = 0;
int index1 = 0;
ListNode* p = head;
ListNode* q = NULL;
while(p != NULL){
list_length++;
p = p->next;
}
if(list_length < n)
return NULL;
else if(list_length == n){ //
p = head;
head = head->next;
delete p;
return head;
}
else{ //
index1 = list_length-n+1;
p = head;
for(int i = 0; i < index1-2; i++)
p = p->next;
q = p->next;
p->next = p->next->next;
delete q;
return head;
}
}
};