上海xx 双向链表 面试题 list node

#include<iostream>  
#include<cstdio>  
#include<string>  
#include<malloc.h>  
using namespace std;  
  
typedef struct mylist  
{  
    void* head;  
    void* tail;  
} List,*pList;  
  
typedef struct mynode  
{  
    void* next;  
    void* prev;  
    int data;  
} Node,*pNode;  
  
pList createlist()  
{  
    pList root;  
    pNode temp;  
    int n;  
    root = (pList)malloc(sizeof(List));  
    root->head = NULL;  
    root->tail = NULL;  
    printf("input data number:");  
    scanf("%d",&n);  
    if(n&&NULL==root->head)  
    {  
        temp = (pNode)malloc(sizeof(Node));  
        printf("data1:");  
        scanf("%d",&temp->data);  
        temp->next = (pList)root;  
        temp->prev = (pList)root;  
        root->head = (pNode)temp;  
        root->tail = (pNode)temp;  
        n--;  
    }  
    for(int i=1; i<=n ; i++)  
    {  
        temp = (pNode)malloc(sizeof(Node));  
        printf("data%2d:",i);  
        scanf("%d",&temp->data);  
        temp->next = (pList)root;  
        temp->prev = (pNode)root->tail;  
        ((pNode)(root->tail))->next = (pNode)temp;  
        root->tail = (pNode)temp;  
    }  
    return root;  
}  
  
void printlist(pList root)  
{  
    pNode temp = (pNode)root->head;  
    int i = 1;  
    while(temp!=(pNode)root)  
    {  
        printf("data%2d:%d\n",i++,temp->data);  
        temp = (pNode)temp->next;  
    }  
  
    /*temp = (pNode)root->tail; 
    while(temp!=(pNode)root) 
    { 
        printf("data%2d:%d\n",--i,temp->data); 
        temp = (pNode)temp->prev; 
    }*/  
}  
  
int main()  
{  
    pList root;  
    root = createlist();  
    printlist(root);  
}  

双向链表的面试题要求list和node是不同的结构体,所以这里使用的void指针
1声明LIst和Node结构体
2创建链表
3尾部追加
4头部删除
都很简单,我只写了创建 打印时测试用的,主要就是试试void
类型的指针用法
上面的所有都加上了显示类型转换
以下去掉了不必要的类型转换
总结一下,
1.当给void类型指针赋值的时候不需要显示类型转换
2.void
给void赋值不需要转换
3.当void
给其他类型的指针赋值时需要显示类型转换
4.当void*与不同类型的指针比较的时候需要显示类型转换
5.当需要链式的时候需要显示类型转换。
注释标记对应1,2,3,4,5的情况
注意:不转换不等于不需要转换,而是编译器隐式转换了

#include<iostream>  
#include<cstdio>  
#include<string>  
#include<malloc.h>  
using namespace std;  
  
typedef struct mylist  
{  
    void* head;  
    void* tail;  
} List,*pList;  
  
typedef struct mynode  
{  
    void* next;  
    void* prev;  
    int data;  
} Node,*pNode;  
  
pList createlist()  
{  
    pList root;  
    pNode temp;  
    int n;  
    root = (pList)malloc(sizeof(List));         //malloc属于情况3  
    root->head = NULL;  
    root->tail = NULL;  
    printf("input data number:");  
    scanf("%d",&n);  
    if(n&&NULL==root->head)  
    {  
        temp = (pNode)malloc(sizeof(Node));   //3  
        printf("data1:");  
        scanf("%d",&temp->data);  
        temp->next = root;            //1  
        temp->prev = root;            //1  
        root->head = temp;           //1  
        root->tail = temp;              //1  
        n--;  
    }  
    for(int i=1; i<=n ; i++)  
    {  
        temp = (pNode)malloc(sizeof(Node));  //3  
        printf("data%2d:",i);  
        scanf("%d",&temp->data);  
        temp->next = root;                   //1  
        temp->prev = root->tail;          //2  
        ((pNode)(root->tail))->next = temp; //5  
        root->tail = temp;  //1  
    }  
    return root;  
}  
  
void printlist(pList root)  
{  
    pNode temp = (pNode)root->head;   //3  
    int i = 1;  
    while(temp!=(pNode)root)                  //4  
    {  
        printf("data%2d:%d\n",i++,temp->data);  
        temp = (pNode)temp->next;          //3  
    }  
  
    /*temp = (pNode)root->tail; 
    while(temp!=(pNode)root) 
    { 
        printf("data%2d:%d\n",--i,temp->data); 
        temp = (pNode)temp->prev; 
    }*/  
}  
  
int main()  
{  
    pList root;  
    root = createlist();  
    printlist(root);  
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 9,747评论 0 16
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,490评论 18 399
  • 1.OC里用到集合类是什么? 基本类型为:NSArray,NSSet以及NSDictionary 可变类型为:NS...
    轻皱眉头浅忧思阅读 5,231评论 0 3
  • 题目类型 a.C++与C差异(1-18) 1.C和C++中struct有什么区别? C没有Protection行为...
    阿面a阅读 12,303评论 0 10
  • 近来从各种渠道频繁读到与“don't judge”相关的文章,内心的洪荒之力命令我要写点什么了。 乍看希言的标题,...
    希希言自然阅读 4,402评论 0 1

友情链接更多精彩内容