• 简单链表


    今天随意看了某人的博客,看到了几道简单的数据结构算法题,来自《剑指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;
    }
  • 相关阅读:
    中国历史年代史的一些总结-缕清上下五千年
    struts2 自己定义表单
    &quot;What&#39;s New&quot; WebPart in SharePoint
    Tomcat+Servlet登录页面实例
    JAVA原始的导出excel文件,快捷通用 方便 还能够导出word文档哦
    Android开发 -- Bootloader
    NorFlash、NandFlash、eMMC比较区别【转】
    strspn() 和 strcspn() 函数【转】
    Device Tree(一):背景介绍【转】
    设备树使用手册【转】
  • 原文地址:https://www.cnblogs.com/zhuangzebo/p/3864400.html
Copyright © 2020-2023  润新知