z1.单链表翻转
2.找出单链表倒数第K个节点
#include <iostream>
using namespace std;
struct node
{
int data;
node *next;
};
node *creat_list(int n)
{
if(n <= 0)
{
return NULL;
}
node *head = NULL;
node *p = NULL;
p = new node;
if(p == NULL)
{
return NULL;
}
head = p;
while(--n)
{
node *q = new node;
p->next = q;
p = q;
}
p->next = NULL;
return head;
}
//单链表翻转
node *revers(node * &head)
{
node *p = head;
node *q = head->next;
node *t = NULL;
while(q != NULL)
{
t = q->next;
q->next = p;
p = q;
q = t;
}
head->next = NULL;
head = p;
return head;
}
//找出单链表倒数第k个节点
node *last_k_node(node *head, int k)
{
node *p = head;
if(p == NULL)
{
return NULL;
}
int i = 0;
for(i = 0; i < k && p!= NULL; i++)
{
p = p->next;
}
if(i < k)
{
return NULL;
}
node *q = p;
p = head;
while(q != NULL)
{
q = q->next;
p = p->next;
}
return p;
}
int main()
{
node *h = creat_list(9);
node *p = h;
for(int i = 0; i < 9; i++)
{
p->data = i;
cout<<p->data<<' ';
p = p->next;
}
cout<<endl;
p = revers(h);
for(int i = 0; i < 9; i++)
{
cout<<p->data<<' ';
p = p->next;
}
cout<<endl;
p = last_k_node(h, 1);
cout<<p->data<<endl;
return 0;
}