나는 다음과 같은 링크리스트의 구현이이 같은 [First]->[Second]->NULL
두 인덱스간에 연결된 목록의 노드를 삭제하는 방법은 무엇입니까?
:이 연결리스트에이 기능을 실행 //
void deleteList(struct _list *list, int from, int to) {
int i;
assert(list != NULL);
// I skipped error checking for out of range parameters for brevity of code
for (i = from; i <= to; i++) {
deleteNode(list->head, i);
}
}
:
struct _node {
char *string;
struct _node *next;
}
struct _list {
struct _node *head;
struct _node *tail;
}
나는 다음과 같은 기능을 만들고 싶어를 deleteNodes(list, 1, 1)
두 번째 줄을 지우고 [First]->[Second]->NULL
을 입력했지만이 입력을 사용하여 deleteList(list, 0, 1)
과 같이 실행하면 [First]->[Second]->[Third]->NULL
나는 seg 결함을 얻는다. 여기
void deleteNode(struct _node *head, int index) {
if (head == NULL) {
return;
}
int i;
struct _node *temp = head;
if (index == 0) {
if (head->next == NULL) {
return;
}
else {
head = head->next;
free(head);
return;
}
}
for (i = 0; temp!=NULL && i<index-1; i++) {
temp = temp->next;
}
if (temp == NULL || temp->next == NULL) {
return;
}
Link next = temp->next->next;
free(temp->next);
temp->next = next;
}
내 deleteNode 기능입니다 :
void pop(struct _node *head) {
if (head == NULL) {
return;
}
struct _node *temp = head;
head = head->next;
free(temp);
}
을하지만 그것은 나를 독방 감금 잘못 제공 또는 메모리 오류 트랩을 중단하십시오. 6.
루프 어디를 'deleteNode' 호출은 결함이 있습니다 : 범위에서 첫 번째 노드를 삭제하면 삭제할 다음 노드는 이전과 같은 색인을 가지지 않습니다. –
물론! 그래서 새로운 머리를 가리 키도록해야합니까? 아니면 완전히 다른 접근 방식을 사용해야합니까? – user6005857
간단한 해결책은 루프를 뒤집고 범위의 마지막 노드를 삭제 한 다음 마지막 순서대로 삭제하는 것입니다. –