单链表逆序
思路
code
#if 1
#include <stdio.h>
typedef struct node {
int data;
struct node *next;
} linkList;
linkList *creatLinkList(void) {
linkList *head =
(linkList *)malloc(sizeof(linkList));
head->data = 0;
head->next = NULL;
return head;
}
void insertNode(linkList *current, int n) {
int i;
linkList *newNode = NULL;
for (i = 1; i <= n; i++) {
newNode = (linkList *)malloc(sizeof(linkList));
if (current == NULL || newNode == NULL) {
return;
}
newNode->data = i;
newNode->next = NULL;
current->next = newNode;
current = newNode;
}
}
void inverseLink(linkList *head) {
#if 1
linkList *p, *q;
p = head->next;
head->next = NULL;
while (p != NULL) {
q = p;
p = p->next;
q->next = head->next;
head->next = q;
}
#else
linkList *temp = NULL;
linkList *p, *q;
if (head == NULL) {
return;
}
p = head->next;
q = head->next->next;
if (p == NULL || q == NULL) {
return;
}
while (q != NULL) {
temp = q->next;
q->next = p;
p = q;
q = temp;
}
head->next->next = NULL;
head->next = p;
#endif
}
void printLinkList(linkList *head) {
linkList *p = head->next;
while (p != NULL) {
printf("%d -> ", p->data);
p = p->next;
}
printf("\r\n");
}
int main() {
int i;
linkList *head = NULL;
head = creatLinkList();
insertNode(head, 10);
printf("原始链表:\r\n");
printLinkList(head);
inverseLink(head);
printf("逆序后链表:\r\n");
printLinkList(head);
scanf("%d", &i);
return 0;
}