链表的实现,以后会更新。
/*带头结点链表常用操作*/
#include <stdio.h>
typedef struct Node
{
int data;
struct Node *next; //漏写过struct
} Node;
Node* createList(int *arr, int n);
int insertList(Node* head, int pos, int data);
int deleteList(Node* head, int pos);
void reverseList(Node **head);
void printList(Node* head);
Node* createList(int* arr, int n){
Node *head = NULL;
Node *p,*q;
int i = 0;
head = (Node*)malloc(sizeof(Node));
p = head;
for (i = 0; i < n; ++i)
{
q = (Node*)malloc(sizeof(Node));
q->data = arr[i];
p->next = q;
p = q;
}
p->next = NULL;
return head;
}
int insertList(Node* head, int pos, int data){
int i = 0;
Node *p,*q;
p = head;
while( p->next != NULL && ++i < pos){
p = p->next;
}
if ( i != pos)
{
printf("Insert fail,the postion is not exist.\n");
return -1;
}
q = (Node*)malloc(sizeof(Node));
q->data = data;
q->next = p->next;
p->next = q;
return 0;
}
int deleteList(Node* head, int pos){
int i = 0;
Node *p,*q;
p = head;
while( p->next != NULL && ++i < pos){
p = p->next;
}
if ( i != pos)
{
printf("delete fail,the postion is not exist.\n");
return -1;
}
q = p->next;
p->next = q->next;
free(q);
return 0;
}
void reverseList(Node **head){
Node *p,*q,*e;
e = NULL;
p = (*head)->next;
if (p == NULL)
{
return;
}
while(p->next != NULL){
q = p;
p = p->next;
q->next = e;
e = q;
}
p->next = e;
(*head)->next = p;
}
void printList(Node* head){
Node* p;
p = head;
while(p->next != NULL){
p = p->next;
printf("%d ", p->data);
}
printf("\n");
}
int main(int argc, char const *argv[])
{
int arr[5] = {1,2,3,4,5};
Node* head;
head = createList(arr,5);
printList(head);
reverseList(&head);
printList(head);
return 0;
}