2014-02-17 4 views
2

연결리스트에서 노드를 삭제하는 경우링크 된 목록 센티넬 노드는 첫 번째 노드에 대한 포인터를 재 할당 피하기 위해

이 목록의 첫 번째 노드에 대한 포인터는 노드가 삭제되는 경우 업데이트해야합니다 이론 목록이 첫 번째 것입니다.

배경

상황은 내 서버 응용 프로그램에서

, 소켓 연결의 연결리스트의 첫 번째 노드에 대한 포인터가 관련된 구조체의 보유 데이터에 개최

Libevent: how to close all open sockets on shutdown?

리스닝 소켓 포트와 같은 실행중인 인스턴스의 컨텍스트. 연결이 닫히면 연결된 목록의 관련 노드를 제거해야합니다. 즉, 노드를 삭제하는 함수는 인스턴스 컨텍스트 구조체에 액세스해야합니다.

나의 첫번째 아이디어이었다 : 링크 된 목록에

각 연결 노드 인스턴스 컨텍스트 구조체에 대한 포인터를 가지고있다. (지저분한)

인스턴스 변수에 대한 전역 변수 포인터. (악.) 그런 다음

나는 sentinel node함으로써 첫 번째 노드가 적 측면 - 스테핑 소켓에 가까운 기능에 대한 필요성을 때문에 제거 될 가능성을 피하고 연결리스트의 첫 번째 노드를 만들 수있는 생각을했다 인스턴스 컨텍스트에 액세스 할 수 있습니다.

질문

이 전초 림프절의 적절한 사용, 또는이 문제를 해결하기 위해 더 나은 방법은 무엇입니까?

+0

아이디어를 간단하게 구현하면, 큰 도움이됩니다. 어쩌면 http://codereview.stackexchange.com/에 게시 할 수 있습니다. 아이디어 : 1) 예를 들어 센티넬 아이디어가 작동 할 수 있습니다. 2) 센티넬 노드와 함께 링크 된 목록을 삭제하려면 특별한 delete()가 필요합니다. 3)이 기술을 사용하면 _high_ 빈 목록의 비율을 비효율적으로 코딩해야합니다. – chux

답변

0

목록의 길이와 같이 저장하려는 연결 목록에 대한 메타 데이터가 있습니까? 그렇다면 센티넬 노드에 저장할 수 있습니다.

관련 문제