题目:创建一个单链表,并且逆置单链表。
//创建单链表
node_t* create(node_t* head, int n)
{
if(head == NULL)
{
head = new node_t();
}
node_t* p = NULL;
node_t* q = head;
int key;
for(int i = 0; i < n; i++)
{
cin >> key;
p = new node_t();
p->value = key;
p->next = NULL;
q->next = p;
q = q->next;
}
return head;
}
//逆置单链表
void reverse(node_t* head)
{
if(head == NULL)
return;
node_t* p = head->next;
node_t* q = NULL;
node_t* r = NULL;
while(p != NULL)
{
q = p->next;p->next = r;r = p;p = q;
}
head->next = r;
}
//单链表节点两两逆置
void doubleReverse(node_t* head)
{
if(head == NULL)
return;
node_t* p = head->next;
node_t* q = NULL;
node_t* r = NULL;
node_t* ptr = head;
while(p != NULL)
{
q = p->next;
if(q != NULL)
{
r = q->next;
q->next = p;
p->next = r;
ptr->next = q;
ptr = p;
p = r;
}
else
{
p = q;
}
}
}