#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;
}
链表常见考题的一些实现
最新推荐文章于 2022-08-13 17:29:43 发布