链表常见考题的一些实现

来源:互联网 发布:书包推荐 知乎 编辑:程序博客网 时间:2024/05/21 00:47
#include <iostream>#include <time.h>#include <cstdlib>using namespace std;typedef int datatype;typedef struct node{    struct node* next;    datatype data;}Node;void initHead(Node** head){    *head = NULL;}void printNode(Node* head){    Node* p = head;    while(p != NULL)    {        cout << p->data << " ";        p = p->next;    }    cout << endl;}Node* insertNode(Node* head, datatype val){    //Node *p = (Node*)malloc(sizeof(Node));    Node* p = new Node();    p->next = NULL;    p->data = val;    if(head == NULL)    {        head = p;    }    else    {        p->next = head->next;        head->next = p;    }    return head;}Node* reverse(Node *head){    if(head == NULL || head->next == NULL)    {        return head;    }    Node *p1, *p2, *p3;    p1 = head;    p2 = head->next;    head->next = NULL;    while(p2 != NULL)    {        p3 = p2->next;        p2->next = p1;        p1 = p2;        p2 = p3;    }    head = p1;    return head;}Node* findMiddle(Node *head){    if(head == NULL || head->next == NULL)    {        return head;    }    Node *p1, *p2;    p1 = p2 = head;    while(1)    {        if(p2->next != NULL && p2->next->next != NULL)        {            p1 = p1->next;            p2 = p2->next->next;        }        else        {            break;        }    }    return p1;}bool isloopedList(Node* head){    if(head == NULL || head->next == NULL)    {        return false;    }    if(head->next == head)    {        return true;    }    Node *p1, *p2;    p1 = p2 = head;    while(p2->next != NULL && p2->next->next != NULL)    {        p2 = p2->next->next;        p1 = p1->next;        if(p1 == p2)        {            return true;        }    }    return false;}int main(){    srand(time(NULL));    Node* head;    initHead(&head);    for(int i = 0; i < 10; i++)    {        head = insertNode(head, rand()%20);    }    cout << "Before reverse:" << endl;    printNode(head);    head = reverse(head);    cout << "After reverse:" << endl;    printNode(head);    Node *p = findMiddle(head);    cout << "Middle of the list is: " << p->data << endl;    return 0;}

原创粉丝点击