链表汇总
单链表
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;
}