链表反转与插入实例
#include<iostream>
using namespace std;
typedef struct listnode
{
int data;
struct listnode * next;
}listnode,*list;
list insert(list head,int num)
{
list node;
list p;
node = (listnode*)malloc(sizeof(listnode));
node->data = num;
p = head->next;
while (p!=NULL)
{
if (p->data == num)
{
node->next = p->next;
p->next = node;
break;
}
p = p->next;
}
return head;
}
list fill(list head)
{
listnode *p,*q;
p = head;
for (int i = 0; i < 100; i++)
{
q = (listnode*)malloc(sizeof(listnode));
q->data = i + 1;
q->next = NULL;
p->next = q;
p = q;
}
return head;
}
list reverse(list head)
{
if (head->next == NULL || head->next->next == NULL)
{
return head;
}
list t;
list p = head->next;;
list q = head->next->next;
while (q!=NULL)
{
t = q->next;;
q->next = p;
p = q;
q = t;
}
head->next->next = NULL;
head->next = p;
return head;
}
void print(list head)
{
list p;
p = head->next;
while (p!=NULL)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main()
{
listnode* head;
head = (listnode*)malloc(sizeof(listnode));
head->next = NULL;
head->data = 0;
fill(head);
print(head);
insert(head, 50);
print(head);
reverse(head);
print(head);
return 0;
}