编程之美3.4 假设有一个没有头指针的单链表。一个指针指向此单链表中间的一个节点(非第一个节点, 也非最后一个节点)。 请将该节点从单链表中删除。 #include <stdlib.h> #include <stdio.h> int array[] = {3,5,1,7,0}; typedef struct Data{ int data; Data * next; } Data; Data * buildLink(Data *head); void deleteNode(Data *node); int main() { Data* head = (Data *)malloc(sizeof(Data)); head->data = -1; head->next = NULL; Data* node = buildLink(head); deleteNode(node); system("pause"); return 0; } Data* buildLink(Data *head) { Data *tmp = head; Data * result = NULL; int len = sizeof(array)/sizeof(int); for(int i=0; i<len; i++) { Data * node = (Data *)malloc(sizeof(Data)); node->data = array[i]; node->next = NULL; if(i == len/2) result = node; tmp->next = node; tmp = node; } printf("end"); return result; } /* 删除的node(非头结点,也非最后一个节点),其实删除的是node->next,然后将node->data值存放node->next->data,狸猫换太子 */ void deleteNode(Data *node) { Data * next = node->next; node->next = next->next; node->data = next->data; free(next); } 思考题,将一个单链表,在只遍历一遍的情况下,将单链表中的元素顺序反转过来