12.15周末总结

链表的查找:查找出链表倒数第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);
	}
}
发布了13 篇原创文章 · 获赞 11 · 访问量 478

猜你喜欢

转载自blog.csdn.net/qq_45811966/article/details/103542703