zoukankan      html  css  js  c++  java
  • 简单链表

    今天随意看了某人的博客,看到了几道简单的数据结构算法题,来自《剑指offer》,想了下,用c实现:

    一、数据结点声明

    #include <stdio.h>
    
    typedef struct node_type {
        int data;
        struct node *next;
    } node;
    
    void insert(node *l, int data)
    {
        node *p, *q;    
        p = l;
        while (p->next) {
            p = p->next;    
        }
    
        q = (node *)malloc(sizeof(node));
        q->data = data;
        q->next = NULL;
        
        p->next = q;
    }

    二、问题解答

    1、取链表的倒序第k个数

     假如有两条相同的链表,第一条先遍历k个数,在第一条链表遍历第k+1数时,第二条链表也开始遍历。

     当第一条链表遍历完时,第二条还剩下k个数没有遍历完,那么可得到倒序第k个数据是什么。同理,用

    两个指针指向同一个链表,按以上所述,便可得结果。

    int get(node *l, int k)
    {
        node *p, *q;
        int i = 0;
        p = l->next;
        q = l;
    
        while (p) {
            p = p->next;        
            i++;
            if (i >= k) {
                q = q->next;
            }
        }
        if (q == l)
            return -1;
        return q->data;
    }

    2、倒序一个单向链表

    将链表的每个节点插入链表的开头节点即可。

    node *reverse(node *l)
    {
        node *p, *q, *head;    
        p = l->next;    
        head = l;
        head->next = NULL;
    
        while(p) {
            q = p->next;
            p->next = head->next;
            head->next = p;
            p = q;
        }
        return head;
    }

    3、用两个栈实现一个队列

    数据进队列时,数据放在第一个栈。

    数据出队列时,如果第二个栈有数据,先将第二个栈的数据排出,直为空;如果第二个栈为空,那么将第一个栈的数据全部放到第二个栈。

    int stack_1[10], cnt_1 = 0;
    int stack_2[10], cnt_2 = 0;
    
    void queue_in(int k)
    {
        stack_1[cnt_1++] = k;
    }
    
    int queue_out()
    {
        if(cnt_2 > 0){
            return stack_2[--cnt_2];
        }
        while(cnt_1 > 0) {
            stack_2[cnt_2++] = stack_1[--cnt_1];
        }
        if (cnt_2 > 0) {
            return stack_2[--cnt_2];
        }
        return -1;
    }
  • 相关阅读:
    RecyclerView 数据刷新的几种方式 局部刷新 notify MD
    【图片】批量获取几万张图片
    RV BaseRecyclerViewAdapterHelper 总结 MD
    RecyclerView.ItemDecoration 间隔线
    Kotlin【简介】Android开发 配置 扩展
    Kotlin 特性 语法糖 优势 扩展 高阶 MD
    一个十分简洁实用的MD风格的UI主框架
    折叠伸缩工具栏 CollapsingToolbarLayout
    FloatingActionButton FAB 悬浮按钮
    Glide Picasso Fresco UIL 图片框架 缓存 MD
  • 原文地址:https://www.cnblogs.com/zhuangzebo/p/3864400.html
Copyright © 2011-2022 走看看