数据结构之链表(创建篇)

  链表是数据结构入门的一章,本文将基于不同的创建方式进行链表的基础操作。

  1.常见的创建方法(定义结构体)

       

typedef struct LinkNode{
    int val;
    struct LinkNode* next;
}Node; // typedef只是一个重命名操作,不用也不影响

上面一段代码就是链表结点的常用定义,其实链表就是许多个这样的结点串在一起

  就像这样,当然头结点其实可有可无,我喜欢加上头结点(这样可以避免一些繁琐操作),需要注意的是 Leetcode里面头结点是有值的,或者说LeetCode里面没有使用头结点。

  接下来介绍链表的增删改查四个操作

1.1插入结点

Node* insert_front(Node* head, int x){
    // 一般头插法就可以解决问题
     // x为要插入的值
    Node* node = new Node;
    node->val = x;
    node->next = head->next;
    head->next = node;
    return head; 
}    

1.2删除结点

Node* delete_k(Node* head, int k)
{
    // 删除第k个结点
    int cnt = 0;
    Node* node = head;
    while(node && cnt < k){
        Node* backup = node; // 保留上一个结点
        node = node->next;
    }
    if(!node){
    cout << "error" << endl;
    return NULL;
    }
    backup->next = node->next; // 直接让上一个结点的next指向这个结点的next就好
    free(node);
    return head;
}
    

1.3查找结点

Node* find_x(Node* head, int x)
{
    // 查找值为x的结点
    Node* node = head->next;
    while(node){
    if(node->val == x) break;
    else node = node->next;
    }
    if(!node){
    cout << "error" << endl;
    return NULL;
    }else return node;
}

改变结点的值较为简单,在此不再赘述,如果有用的话,会将数组模拟链表的方法发出来供大家参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值