0
bool DeleteMNodes (int x, int m)
코드를 작성하십시오. 이 함수는 값이 x
인 첫 번째 m
노드를 삭제합니다. 값이 x
인 노드가 하나 이상 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다. 그렇지 않으면 false를 반환합니다. 값이 x
인 노드 수가 m
보다 작은 경우 값이 x
인 모든 노드를 삭제합니다. 이 함수는 O(n)
에서 실행되어야합니다. 여기 단일 링크 된 목록에서 m 노드 삭제
class IntSLLNode
{
public:
int val;
IntSLLNode* next;
IntSLLNode(int val,IntSLLNode* next);
~IntSLLNode();
};
그리고 이것은 SSL 클래스입니다 :
bool IntSLList::DeleteMNodes(int x, int m)
{
IntSLLNode *pred, *tmp, *delNode;
int count=0;
if (IsEmpty())
return false;
if (count <= m) {
if (head->val == x) {
DeleteFromHead();
count++;
}
}
for (pred=head, tmp=head->next; tmp!=NULL;)
{
if (count <= m)
{
if (tmp->val == x)
{
delNode = tmp;
pred->next = tmp->next;
tmp = tmp->next;
delete delNode;
count++;
}
else {
pred = pred->next;
tmp = tmp->next;
}
}
}
if (count>=1)
return true;
else
return false;
}
}
그러나 :
여기class IntSLList
{
public:
IntSLList();
~IntSLList();
bool IsEmpty(void);
void AddToHead(int val);
void AddToTail(int val);
void DeleteFromHead(void);
void DeleteFromTail(void);
bool DeleteNode(int val);
bool IsInList(int val);
bool DeleteMNodes (int x, int m); //My function
void Print();
private:
IntSLLNode *head, *tail;
};
이 DeleteMNodes(int x, int m)
기능의 내 구현 그것은 작동하지 않습니다!. 뭐가 잘못 됐어?
무엇이 오류입니까? –
무한 루프에 빠져 있다고 생각합니다. 'count <= m'을'count
ammarx
'DeleteMNodes'를 호출 할 때 알아야합니다. 또한, 카운터가 0으로 초기화되므로, m 노드를 삭제하려면 'count