이 Slashdot 인터뷰에서 Linus Torvalds는 다음과 같이 인용됩니다.
"이전"항목을 추적하여 단일 링크 목록 항목을 삭제 한 다음 항목을 삭제하여 다음과 같은 작업을 수행하는 사람이 너무 많습니다.
if (prev)
prev-> next = entry-> next;
else
list_head = 항목-> 다음;그런 코드를 볼 때마다 "이 사람은 포인터를 이해하지 못합니다"로 이동합니다. 슬프게도 매우 흔합니다.
포인터를 이해하는 사람들은 "항목 포인터에 대한 포인터"를 사용하고 list_head의 주소로 초기화합니다. 그런 다음 목록을 탐색 할 때 "* pp = entry-> next"를 수행하여 조건을 사용하지 않고 항목을 제거 할 수 있습니다.
PHP 개발자로서 저는 10 년 전 대학 소개 C 이후 포인터를 다루지 않았습니다 . 그러나 나는 이것이 내가 익숙해야 할 상황 유형이라고 생각합니다. 리누스는 무엇에 대해 이야기하고 있습니까? 솔직히 말하면, 링크 된 목록을 구현하고 항목을 제거하라는 요청을 받으면 위의 '잘못된'방법은 내가 갈 길입니다. Linus가 가장 잘 말한 것처럼 코딩하려면 무엇을 알아야합니까?
실제로 프로덕션 코드 에서이 문제가 없으므로 Stack Overflow 대신 여기에 묻습니다.
prev
전체 노드를 저장하는 대신의 위치를 저장해야 할 때의 위치 만 저장할prev.next
수 있다는 것입니다. 관심있는 유일한 항목이므로 포인터에 대한 포인터입니다. 그리고 그렇게하면 어리석은 것을 피할 수 있습니다.if
이제list_head
노드 외부에서 포인터가 어색한 경우가 없기 때문에 . 리스트의 헤드에 대한 포인터는 의미 적으로 다음 노드에 대한 포인터와 동일합니다.