leetcode第19題Remove Nth Node From End of List

1233 ワード

この問題を見ると本能的な反応は針とチェーン時計に慣れていないので、毛皮しか知らないので、あまり練習していません.この問題に関する知識点がたくさんあるので、一つ一つ説明します.
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;
		}
	}
};