需求描述:在单链表上操作,完成链表逆序typedef struct LinkNode { int val; struct LinkNode* next; }LinkNode; // 创建单链表 void creatLinkList(LinkNode* head); // 链表逆序(先删除节点再头插) void linkListReverse(LinkNode** head); int main() { //创建单链表 LinkNode* head = (LinkNode*)malloc(sizeof(LinkNode)); if(head == NULL) {exit(-1);} head->next = NULL; LinkNode* curr = head; creatLinkList(curr); //单链表逆序(先删除节点再头插) linkListReverse(&(head->next)); LinkNode* firstNode = head->next; while (firstNode) { printf("%d ",firstNode->val); firstNode = firstNode->next; } printf(" "); return 0; } #pragma mark - 创建单链表 void creatLinkList(LinkNode* head) { for(int i = 0;i < 5;i++) { LinkNode* node = (LinkNode*)malloc(sizeof(LinkNode)); if(node == NULL) {exit(-1);} node->val = 100 * (i + 1); node->next = head->next; head->next = node; head = head->next; } } #pragma mark - 链表逆序(先删除节点再头插) void linkListReverse(LinkNode** head) { if(head == NULL)exit(-1);//非法输入 if(*head == NULL)exit(-1);//空链表 if((*head)->next == NULL) exit(-1);//只有一个节点,无需反转 LinkNode* curr = *head; while (curr->next != NULL) { LinkNode* freeNode = curr->next; //删除这个节点 curr->next = freeNode->next; //将freeNode插入到链表头部 freeNode->next = *head; *head = freeNode;//将头指针指向freeNode } }