链表常见考题的一些实现
来源:互联网 发布:书包推荐 知乎 编辑:程序博客网 时间: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;}