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
  • 相关阅读:
    CHIL-ORACLE-truncate 语法 清空表数据
    CHIL-ORACLE-复制表结构与复制表数据
    CHIL-ORACLE-伪列
    CHIL-ORACLE-给表插入数据
    CHIL-ORACLE-修改
    CHIL-ORACLE-创建同义词
    CHIL-ORACLE-创建默认约束
    CHIL-ORACLE-创建视图
    CHIL-ORACLE-检查约束(check)
    CHIL-ORACLE-主外键约束(primary key / foreign key)
  • 原文地址:https://www.cnblogs.com/52Cassie/p/4817649.html
Copyright © 2011-2022 走看看