티스토리 뷰
#include <stdio.h>
#include <stdlib.h>
//node 구조체정의
struct node {
int data;
struct node *next;
};
struct node* head = 0;
//sLL에 추가하는함수
void addToSLL(int data)
{
struct node *cur;
cur = (struct node*)malloc(sizeof(struct node));
cur->data = data;
cur->next = 0;
//1.SLL이 empty
if (head == 0) {
head = cur;
return;
}
//2 else
//2.1끝을찾자
//2.2끝에 붙이자
{
struct node* lastnode = head;
while (lastnode->next != 0)
{
lastnode = lastnode->next;
}
lastnode->next = cur;
return;
}
}
//data를 찾아서 삭제
void delFromSLL(int data)
{
struct node *cur = head;
while (1) { // 찾는다
if (cur == 0) {
break;
}
if (cur->data == data) {
break;
}
cur = cur->next;
}
if (cur == 0) { //지울 것을 못 찾았음
return;
}
{
//1. 맨 앞의 것을 가리키는 경우
if (cur == 0) {
head = head->next;
free(cur);
return;
}
else { //2. 아닌경우
struct node *prev = head; //previous
while (prev->next != cur) { // prev 가 cur 를가리켜야하므로 찾는다
prev = prev->next;
}
prev->next = cur->next;
free(cur);
return;
}
}
}
//SLL에 들어있는 데이터를 앞에서부터 차례로출력
void showSLL()
{
struct node *cur = head;
while (cur != 0) {
printf("%d ", cur->data);
cur = cur->next;
}
return;
}
int main(void)
{
int in, i;
int num;
scanf("%d", &in);
for (i = 0; i < in; i++) {
scanf("%d", &num);
addToSLL(num);
}
scanf("%d", &num);
delFromSLL(num);
showSLL();
return 0;
}
'IT > 자료 구조' 카테고리의 다른 글
[데이터구조] SLL에 숫자 데이터 삽입하기 / 초간단 정리!! (0) | 2020.03.31 |
---|---|
[데이터구조] SLL에 숫자 데이터 삽입하기 (0) | 2020.03.30 |
[데이터 구조] SLL의 데이터를 역순으로 보여주기 (0) | 2020.03.26 |
[데이터 구조] SLL에서 데이터 찾아서 지우고 결과 출력하기(변형) (0) | 2020.03.26 |
[데이터 구조] SLL에 숫자 데이터 추가하기 (0) | 2020.03.26 |
댓글