자료구조튜터링-4.리스트

ByeonYeongsin·2020년 10월 9일
0

자료구조

목록 보기
3/5

실습 4. 단순 연결리스트와 순차 탐색 알고리즘

문제 정의

□ n개의 정수 데이터가 임의의 순서로 주어질 때, 이를 1차원 배열에 임시로 저장한 후 단순 연결리스트 뒤쪽에 차례로
삽입한다.
□ 또한, 주어지는 키(key)값이 있는 노드를 순차 탐색에 의해 찾아 연결리스트에서 제거한 후, 이 리스트를 처음부터 다시
방문하여 각 노드의 데이터를 차례로 출력한다. (키가 없는 경우는 “키가 없음”을 출력함)

#include <stdio.h>
#include <stdlib.h>

typedef struct ListNode {
	int data;
	struct ListNode *link;
}ListNode;

int main() {
	int n, newNum, remove;
	scanf("%d", &n);
	int *num = (int *)malloc(sizeof(int)*n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &newNum);
		num[i] = newNum;
	}
	
	ListNode *pre = (ListNode *)malloc(sizeof(ListNode));
	pre->data = num[0];
	pre->link = NULL;
	ListNode *head = (ListNode *)malloc(sizeof(ListNode));
	head = pre;

	for (int i = 1; i < n; i++) {
		ListNode *p = (ListNode *)malloc(sizeof(ListNode));
		p->data = num[i];
		p->link = NULL;
		pre->link = p;
		pre = p;
	}

	pre = head;

	while (pre != NULL) {
		printf("%d ", pre->data);
		pre = pre->link;
	}

	printf("\nremove: ");
	scanf("%d", &remove);

	
	ListNode *ppre = (ListNode *)malloc(sizeof(ListNode));
	ppre = head;
	pre = ppre->link;
	while (pre != NULL) {
		if (head->data == remove) {
			head = ppre->link;
			break;
		}
		if (pre->data == remove) {
			ppre->link = pre->link;
		}
		pre = pre->link;
		ppre = ppre->link;
	}

	pre = head;
	while (pre != NULL) {
		printf("%d ", pre->data);
		pre = pre->link;
	}

}















0개의 댓글