티스토리 뷰

SLL

 

#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;
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31