有/无头节点的单链表的创建(尾插法)
2016-05-23 10:16
357 查看
本文通过对“有头节点的单链表”和“无头节点的单链表”的创建过程的比较,分析了二者的细微区别。代码很简单,就不做注释了,注意两个方法中1和2处的不同。
#include <iostream> typedef struct node { int data; struct node *next; } NODE; // 采用尾插法,创建带头节点的单链表 NODE *create_end_1(int arr[], int len) { NODE *head = (NODE *)malloc(sizeof(NODE *)); head->next = NULL; // 1 NODE *end = head; for (int i = 0; i < len; i++) { // 2 NODE *p = (NODE *)malloc(sizeof(NODE *)); p->data = arr[i]; end->next = p; end = p; } end->next = NULL; return head; } // 采用尾插法,创建一个没有头节点的单链表 NODE *create_end_2(int arr[], int len) { NODE *head = (NODE *)malloc(sizeof(NODE *)); head->data = arr[0]; // 1 NODE *end = head; for (int i = 1; i < len; i++) { // 2 NODE *p = (NODE *)malloc(sizeof(NODE *)); // 也可用 new NODE(); p->data = arr[i]; end->next = p; end = p; } end->next = NULL; return head; } // 此方法适用于不带头节点的单链表的打印,对于带头节点的单链表要稍作处理。 void print(NODE *head) { if (head == NULL) return; while (head != NULL) { printf("%d\n",head->data); head = head->next; } } int main(int argc, const char * argv[]) { int arr[] = {1,2,3,4,5,6,7}; int len = sizeof(arr)/sizeof(int); // 带头节点的单链表 NODE *head1 = create_end_1(arr, len); NODE *first = head1->next; print(first); printf("----------------------\n"); // 不带头节点的单链表 NODE *head2 = create_end_2(arr, len); print(head2); return 0; }
相关文章推荐
- 自定义异常信息的request存储
- FastDFS安装、配置、部署(一)-安装和部署 (转)
- POJ 1155 经典树形dp+分组背包 + 模板
- js页面刷新的几种方法
- linux动态时钟探索
- VC线程同步技术剖析
- struts2拦截器interceptor的三种配置方法
- 同步目录
- "undefined reference to" 问题解决方法
- 各种加解密算法比较
- 输入URL到展现页面的全过程
- solr学习之九:MoreLikeThis相似查询
- 自然语言处理
- aidl相关问题
- 九度OJ - 1109 - 连通图
- Android盒子开发
- 172. Factorial Trailing Zeroes
- javaWeb学习
- 匿名类
- Oracle 11g的7个服务详解