2012-11-23 4 views
0

스택이 있고 지정된 요소 앞에 노드를 삽입해야하며이 코드는 작동하지만 정렬이 작동하지 않기 때문에 count 및 count1없이 코드가 필요합니다. 코드를 다시 만들 수있게 도와 주시겠습니까? 내가 코드 뭔가를 시도하지만지정된 요소 앞에 노드를 삽입하십시오.

void Stack::stackA(Item *q,Item *q1) // q - specified element, q1 - new element 
{ 

int count=0; 
int count1=0; 
for (Item *i=this->first;i;i=i->next) 
{ 
    count++; 
    if (*i == *q) // Here we find position of the specified element 
     break; 
} 


for (Item *i=this->first;i;i=i->next) 
{ 

    Item *temp=new Item(*q1); 

    if(*this->first == *q) // if element first 
    { 
     this->first=temp; 
     temp->next=i; 
     break; 
    } 
    if (count1+1==count-1) //count-1,insert before specified element 
    { 
      if(i->next) 
      temp->next=i->next; 
      else 
      temp->next=0; 
      i->next=temp; 
    } 
    count1++; 
} 
} 
+0

왜 std :: stack이 아닌 사용자 정의 단일 링크 목록 (오류가 발생하기 쉬운)을 사용하고 있습니까? –

답변

1
여기서의 목표는 q 전에 노드를 찾을 수 있습니다

작동하지 않습니다이다, 그것의 nextq1에, 다음 q

void Stack::stackA(Item *q,Item *q1) // q - specified element, q1 - new element 
{ 
    Item* item = this->first; 
    if (item == q) { 
     this->first = q1; 
     q1->next = q; 
     return; 
    } 
    while (item != null) { 
     if (item->next == q) { 
      item->next = q1; 
      q1->next = q; 
      break; 
     } 
     item = item->next; 
    } 
} 

q1->next 세트 업데이트 : q이 첫 번째 항목 인 경우 사례를 처리합니다.

+0

작동하지만 지정된 요소 뒤에 연결이 끊어졌습니다 –

+0

연결이 끊어짐을 의미합니까? 방금 q가 목록의 첫 번째 항목 인 경우를 처리하도록 코드를 수정했습니다. – garbagecollector