有/无头节点的单链表的创建(尾插法)

本文通过对“有头节点的单链表”和“无头节点的单链表”的创建过程的比较,分析了二者的细微区别。代码很简单,就不做注释了,注意两个方法中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;
}
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值