链表:C

链表汇总

单链表

typedef struct Link {
	char elem;
	Link * next;
}link;

输出单链表

void display(link * p) {
	link* temp = p;
	while(temp) {
		printf("%d", temp->elem);
		temp = temp->next;
	}
	printf("\n");
}

插入元素

link * insertLink(link * p, int elem, int add) {
	link* temp = p;
	for (int i = 1; i < add; i++) {
		temp = temp->next;
		if (!temp) {
			printf("invalid address!");
			return p;
		}
	}
	link* c = (link*)malloc(sizeof(link));
	c->elem = elem;
	c->next = temp->next;
	temp->next = c;
	return p;
}

删除元素

link * delLink(link *p, int add) {
	link* temp = p;
	for (int i = 1; i < add; i++) {
		temp = temp->next;
		if (temp->next == NULL){
			printf("invalid address");
			return p;
		}
	}
	link* del = temp->next;
	temp->next = temp->next->next;
	free(del);
	return p;
}

查找元素

int selectElem(link * p, int target) {
	link * temp = p;
	add = 1;
	while (temp->next != NULL) {
		temp = temp->next;
		if (temp->elem == target) {
			return add;
		}
		add++;
	}
	return -1;
}

反转链表

link * reverseLink(link * head) {
	if (head == NULL || head->next == NULL) {
		return head;
	}
	link* newHead = reverseLink(head->next);
	head->next->next = head;
	head->next = NULL;
	return newHead;
}
posted @ 2021-11-20 18:03  fristzzz  阅读(65)  评论(0)    收藏  举报