zoukankan      html  css  js  c++  java
  • 腾讯面试题

    快速找到未知长度单链表的中间节点

    使用快慢指针,当一个指针i指向下一个节点时,另一个指针j指向下一个节点的下一个节点。

    即j的移动速度是i的两倍,当j指向最后一个节点时,i指向链表的中间节点

    代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    
    typedef int ElemType;
    
    typedef struct node
    {
        ElemType data;
        struct node *next;
    }LinkList;
    
    LinkList *CreateListTail()
    {
        LinkList *p,*r,*head;
        int i;
    
        head = (LinkList *)malloc(sizeof(LinkList)); /* L为整个线性表 */
        r=head;                                /* r为指向尾部的结点 */
    
        for (i=0; i < 20; i++)
        {
            p = (LinkList *)malloc(sizeof(LinkList)); /*  生成新结点 */
            p->data = rand()%100+1;           /*  随机生成100以内的数字 */
            r->next=p;                        /* 将表尾终端结点的指针指向新结点 */
            r = p;                            /* 将当前的新结点定义为表尾终端结点 */
        }
    
        r->next = NULL;                       /* 表示当前链表结束 */
        
        return head;
    }
    
    void print(LinkList *L)
    {
        LinkList *p1;
        p1=L->next;
    
        int n=20;
        while(n--)
        {
            printf("%d	",p1->data);
            p1=p1->next;
        }
        
        printf("
    ");
     
    }
    
    int GetMidNode(LinkList *L,ElemType *e)
    {
        LinkList *search,*mid;
        search=mid=L;
    
        while(search->next!=NULL)
        {
            if(search->next->next!=NULL)
            {
                search=search->next->next;
                mid=mid->next;
            }
            else
                search=search->next;
        }
    
        *e=mid->data;
    
        return *e;
    }
    
    int main()
    {
        LinkList *head;
        int t,e;
    
        printf("1、创建链表
    2、查看链表
    3、查找中间节点数据
    ");
        printf("请输入你的选项:
    ");
    
        while(t)
        {
            scanf("%d",&t);
            switch(t)
            {
            case 1:
                head=CreateListTail();
                print(head);
                break;
            case 2:
                print(head);
                break;
            case 3:
                e=GetMidNode(head,&e);
                printf("%d
    ",e);
                break;
            default:
                exit (0);
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    【react native】有关入坑3个月RN的心路历程
    【react-native】持续踩坑总结
    【react native】rn踩坑实践——从输入框“们”开始
    【CSS】少年,你想拥有写轮眼么?
    【杂谈】小记一个ios11的bug
    基于MATLAB&摄像头的实时目标跟踪
    WebRTC 音频模块单独编译 --【转载】
    高斯分布--转载
    win 7 64位 下 VMware Ubantu 14.04 设置共享文件夹失败
    GMM算法
  • 原文地址:https://www.cnblogs.com/52Cassie/p/4817649.html
Copyright © 2011-2022 走看看