【データ構造---4】指定された値valに等しいチェーンブロックを削除するすべてのノード

3911 ワード

テーマの説明:
リストから指定値valに等しいすべてのノードを削除します.
例:
入力:1->2->6->3->4->5->6,val=6出力:1->2->3->4->5
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
考え方の分析:
1.結果チェーンテーブルを作成し、最後の結果として2を返します.元のチェーンテーブルを巡回して、現在のノードが保存している値と削除したい値が同じでない場合、ノードを結果チェーンテーブルに保存します.結果チェーンテーブルの最後のノードのnextはNULLを指します.
コードの実装:
struct ListNode* removeElements(struct ListNode* head, int val)
{
	 struct ListNode* pCur = head;
	 struct ListNode* result = NULL;//          
	 struct ListNode* last = NULL;//           
	 while (pCur != NULL)
	 {
		  if (pCur->val != val)
		  {
			   if (last==NULL)
			   {
				    result = last=pCur;
			   }
			   else
			   {
				   last->next=pCur;
				   last = pCur;
			   }
		  }
		  pCur = pCur->next;
	 }
	 if (last != NULL)
	 {
		  last->next = NULL;
	 }
	 return result;
}