프로그래밍 인터뷰 사이트를 보면서 링크 된 목록의 인접 요소를 바꿔 코드를 발견했지만 조금 틀린 것으로 나타났습니다. 아래는 코드입니다.링크 된 목록에서 인접한 요소 바꾸기
void swap (struct list **list1)
{
struct list *cur, *tmp, *next;
cur = *list1;
if (cur && cur->next)
*list1 = cur->next;
//To make sure that we have at least two more elements to be swapped.
while (cur && cur->next)
{
next = cur->next;
tmp = next->next;
next->next = cur;
//We have to make 1->next as 4 in above example (figure).
if (tmp)
cur->next = tmp->next;
cur = tmp;
}
return;
}
이제 나를위한 조건 if (temp)
이 바로 여기에 없습니다. 그 평가가 맞습니까?
우리가 같은 링크 된 목록을 가정 해 봅시다 :
이제 우리의 목표는 같은 링크 된 목록을 만드는 것입니다1->2->3->4->NULL
다음 if (temp)
우리의 코드가
2->1->4->3->NULL
내 걱정되는 경우, 우리는 링크 된리스트의 끝에 null을 할당 할 수 없다.
덕분에 내 편집 한 게시물을 읽을 않았다. –
@Amit,'if (tmp)'를 제거해도 작동하지 않게됩니다. -리스트의 끝에 루프가 있고, 노드의 노드 수가 홀수 일 경우, 마지막 것. 나는이 코드가 의도적으로 인터뷰를 위해 혼란스러워하기를 정말로 바란다. 실제로는 목록 구현을 내용에서 분리하고'std :: list '정도만 사용하는 것이 좋습니다. 'data *'를 교환하는 것이 훨씬 더 쉬워 질 것입니다 ... – eran
@Amit, 그냥 궁금합니다 -이 대답을 먼저 받아 들인 다음 un-accept (또는 ...라고 불렀습니다). 이것이 당신의 질문에 더 이상 대답하지 않는 특별한 이유가 있습니까? – eran