#include <stdio.h>
#include <stdlib.h>
typedef struct Linknode{
int data;
struct Linknode *link;
}Linknode;
void add_first(Linknode *head, int data);
void print_list(Linknode *head);
int main() {
Linknode *head = (Linknode *)malloc(sizeof(Linknode));
head->data = 1;
head->link = NULL;
add_first(head, 0);
print_list(head);
return 0;
}
void add_first(Linknode *head, int data) {
Linknode *ptr = (Linknode *)malloc(sizeof(Linknode));
ptr->data = data;
ptr->link = head;
head = ptr;
}
void print_list(Linknode *head) {
Linknode *ptr = NULL;
ptr = head;
while (ptr != NULL) {
printf("%d ", ptr->data);
ptr = ptr->link;
}
}
일단 알고싶은 부분만 구현한 코드임
연결리스트인데 맨 앞에 노드 추가하는 add_first가 작동이 안됨
내가 이해하기로는
1. 새로운 노드 ptr에 데이터 받기
2. ptr->link 가 head의 것을 가리키도록 하기
3. head가 ptr을 가리키도록 하기
이건데 내가 뭐 놓친게 있는지 컴파일 해보면 원하는 출력은 0 1 인데 1 만 뜨는 상태임
나머지는 구현이 되던데 이것만 왜인지 안됨...
깃갤 족고수님들 믿습니다
void add_first(Linknode **head
ㄳㄳ
포인터 자체는 그냥 값이라서 head=ptr가 밖에 영향을 미치지 못함. Linknode*를 반환해서 밖에서 head = x 하는 식으로 해야할듯?
구글링 여러개 해봐도 이문제인거 같네 감사
void add_first(Linknode **head, int data) { Linknode *ptr = (Linknode *)malloc(sizeof(Linknode)); ptr->data = data; ptr->link = *head; *head = ptr; }
ㅇㅇㅇㅇㅇ 딱 이거대로 하고 호출할때 &붙이니까 됨 포인터 한번 다시 훑어봐야지..감사