链表的查找:查找出链表倒数第k个数据
#include <stdio.h>
#include <malloc.h>
#define N 100
typedef struct node{
int data;
struct node*next;
}Node;
Node*create_head_node(void)
{
Node*Head = (Node*)malloc(sizeof(Node));
Head->next = NULL;
return Head;
}
void create_node(Node*Head,int e)
{
Node*now = Head;
while(now->next != NULL)
{
now = now->next;
}
Node*p = (Node*)malloc(sizeof(Node));
p->data = e;
p->next = NULL;
now->next = p;
}
void research(Node*Head,int index)
{
Node*p = Head;
int i;
for(i = 0;i <= index;i++)
{
p = p->next;
}
printf("%d\n",p->data);
}
int main(void)
{
int a[N];
int n,i;
int k;
int size = 0;
scanf("%d",&n);
for(i = 0;i < n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&k);
Node*Head = create_head_node();
for(i = 0;i < n;i++)
{
create_node(Head,a[i]);
size++;
}
research(Head,size-k);
}
链表创建一个包含L个结点的链表,输入一个整数向前或向后移动链表
例1:
输入:
7
1 2 3 4 5 6 7
3
输出:
4 5 6 7 1 2 3
例2:
输入:
6
2 3 4 6 7 8
-2
输出:
7 8 2 3 4 6
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define N 100
typedef struct node{
int data;
struct node*next;
}Node;
Node*create_head_node(void)
{
Node*Head = (Node*)malloc(sizeof(Node));
Head->next = NULL;
return Head;
}
void create_node(Node*Head,int e)
{
Node*now = Head;
while(now->next != NULL)
{
now = now->next;
}
Node*p = (Node*)malloc(sizeof(Node));
p->data = e;
p->next = NULL;
now->next = p;
}
Node* positive(Node*Head,int n)
{
Node*p = Head;
Node*q = Head;
int i;
for(i = 0;i < n;i++)
{
p = p->next;
}
while(q->next != NULL)
{
q = q->next;
}
q->next = Head->next;
Head->next = p->next;
p->next = NULL;
return Head;
}
int main(void)
{
int a[N];
int n,i;
int k;
scanf("%d",&n);
for(i = 0;i < n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&k);
Node*Head = create_head_node();
for(i = 0;i < n;i++)
{
create_node(Head,a[i]);
}
if(k < 0)
k = n+k;
Node*p = positive(Head,k);
while(p != NULL)
{
p = p->next;
printf("%d ",p->data);
}
return 0;
}
输入一个链表,找到中间的结点,并且输出
(要求:只能遍历一遍链表)
#include <stdio.h>
#include <malloc.h>
typedef struct num{
int data;
struct num*next;
}Num;
Num*creat_head()
{
Num*Head = (Num*)malloc(sizeof(Num));
Head->next = NULL;
return Head;
}
void creat_node(Num*Head,int e)
{
Num*head = Head;
while(head->next != NULL)
head = head->next;
Num*now = head;
Num*p = (Num*)malloc(sizeof(Num));
p->next = NULL;
p->data = e;
now->next = p;
now = p;
}
void print_middle(Num*Head,int index)
{
Num*p = Head->next;
int i;
for(i = 1;i < index;i++)
{
p = p->next;
}
printf("%d\n",p->data);
}
int main(void)
{
int n;
scanf("%d",&n);
int i;
int a[n];
for(i = 0;i < n;i++)
{
scanf("%d",&a[i]);
}
Num*Head = creat_head();
for(i = 0;i < n;i++)
{
creat_node(Head,a[i]);
}
if(n%2 != 0)
print_middle(Head,n/2+1);
else
{
print_middle(Head,n/2);
print_middle(Head,n/2+1);
}
}