码农的世界程序员数据结构和算法分析

【数据结构】线性表之单链表小结练习(快速找到未知长度单链表的中间

2017-07-29  本文已影响113人  NotFunGuy

面试题一般会有普通方法和高级方法,高级方法无疑会大大的加分!


题目一:快速找到未知长度单链表的中间节点(腾讯面试题

普通解法
高级解法
#include <stdio.h>

#define OK 1;
#define ERROR 0;
#define TRUE 1;
#define FALSE 0;
#define MAXSIZE 20  /* 定义线性表可能达到的最大长度 */

typedef int  ElemType;
typedef struct {

    ElemType data[MAXSIZE];
    int length;
    
}SqList;


typedef int  Status;

// 单链表
typedef struct Node{
    
    ElemType data; // 数据域
    struct Node * next; // 指针域
    
}Node;

// 取别名
typedef struct Node * LinkList;

/**
 * 用快慢指针快速找到未知长度单链表的中间节点
 */
Status GetMidNode(LinkList L, ElemType * e){
    
    LinkList search, mid;
    
    mid = search = L;
    
    while (search->next != NULL) {
        
        //search的速度是mid的两倍
        if (search->next->next != NULL) {
            
            search = search->next->next;
            mid = mid->next;
        }else{
            
            search = search->next;
        }
    }
    
    // 中间节点
    *e = mid->data;
    
    return OK;
}

上一篇 下一篇

猜你喜欢

热点阅读