|
|
今日学习任务
| 掌握链表的相关知识。 |
今日任务完成情况
| 了解了有表头、无表头的链表分别是如何编程的,并可以ke'j自己写出 |
题汇总
| 对链表的编写不熟练。 |
今日未解决问题
| 无 |
今日开发收获 | 了解了建立链表的具体过程,并学会了在头,尾和中间插入链表,增加链表,删除链表以及逆序。 |
自我评价
| 可以用画图理解链表插入、逆序、删除,但是对部分代码还有点问题,可以解决。 |
其他
| 无 |
#include <stdio.h> #include <stdlib.h>
struct node { int num; struct node * next; };
enum RESULT { LINK_ENPTY = -1, INSERT_SUCCESS, INSERT_FAIL, DELETE_SUCCESS, DELETE_FAIL, RESERVE_SUCCESS, RESERVE_FAIL };
typedef struct node Node; typedef Node * link;
void create_link(link *head) { *head = NULL; }
void insert_head_node(link newnode,link *head) { newnode->next = *head; *head = newnode; }
int insert_mid_node(link newnode,link *head,int num) { if(*head == NULL) { return LINK_ENPTY; }
link temp = *head;
while(temp != NULL) { if(temp->num == num) { newnode->next = temp->next; temp->next = newnode; return INSERT_SUCCESS; } temp = temp->next; } return INSERT_FAIL; } void insert_tail_node(link newnode,link *head) { if(*head == NULL) { newnode->next = NULL; *head = newnode; } else { link temp = *head; while(temp->next != NULL) { temp = temp->next; } temp->next = newnode; } }
int delete_link(link *head,int num) { if(*head == NULL) { return DELETE_FAIL; } link temp = *head;
if((*head)->num == num) { *head = (*head)->next; free(temp); temp = NULL; } else { while(temp != NULL) { link p; p = temp; temp = temp->next; if(temp->num == num) { p->next = temp->next; free(temp); temp = NULL; return DELETE_SUCCESS; } } } return DELETE_FAIL; }
int reserve_link(link *head) { if(*head == NULL||(*head)->next == NULL) { return RESERVE_FAIL; } link p = *head; link s = p->next; link t = s->next; while(t != NULL) { s->next = p; p = s; s = t; t = t->next; } s->next = p; (*head)->next = NULL; *head = s; return RESERVE_SUCCESS; }
void display_link(link head) { link temp = head; while(temp != NULL) { printf("%d\n",temp->num); temp = temp->next; } }
int main() { int i; link head; link newnode;
create_link(&head);
for(i = 0;i < 10;i++) { newnode = (link)malloc(sizeof(Node)); newnode->num = i + 1; insert_tail_node(newnode,&head); }
display_link(head);
/* newnode = (link)malloc(sizeof(Node)); newnode->num = 6; if((insert_mid_node(newnode,&head,5)) == INSERT_SUCCESS) { display_link(head); } else { printf("error!\n"); }
delete_link(&head,1); display_link(head);*/
reserve_link(&head); display_link(head);
return 0; } |