一些单链表的面试题

来源:互联网 发布:daas大数据 编辑:程序博客网 时间:2024/05/21 07:31
//知道头节点head和节点的结构,逆序单链表struct Node{    int num;    Node* next;}void resort(Node* head){    Node *next, *cur = head;    while(head->next)    {        next = head->next;//单链表只要一断连就没有索引所以需要保留,所以思路就是先保存然后断链        head->next = next->next;//        next->next = cur;//第一次cur=head        cur = next;//head节点是不移动的,但是每次都需要把head的next节点加到最前面,所以需要有个节点保存    }}//寻找单链表的中间节点Node* find(Node* head){    Node *ptr1 = head, *ptr2 = head;    while(ptr1->next && ptr2->next->next)    {        ptr1 = ptr1->next;        ptr2 = ptr2->next->next;    }    return ptr1;}//判断一个单链表是否是循环链表int isloop(Node* head){    Node* node = head->next;    while(node)    {        if(node == head)            return 1;        else            node = node->next;    }    return 0;}//判断一个单链表是否有环int hasloop(Node* head){    Node *ptr1 = head->next, *ptr2 = head->next->next;    while(ptr1 && ptr2)    {        if(ptr1 == ptr2)            return 1;        else        {            ptr1 = ptr1->next;            ptr2 = ptr2->next->next;        }    }    return 0;}//判断找出单链表的倒数第n个节点Node* findN(Node* head, int n){    Node *ptr1 = head, *ptr2 = head;     for(int i = 0; i < n; ++i)    {        ptr1 = ptr1->next;    }    while(ptr1)    {        ptr1 = ptr1->next;        ptr2 = ptr2->next;    }       return ptr2;}
原创粉丝点击