一日一码07——链表

来源:互联网 发布:钢琴电脑软件 编辑:程序博客网 时间:2024/05/10 17:05

链表的实现,以后会更新。


/*带头结点链表常用操作*/#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;}