我是靠谱客的博主 沉默大地,这篇文章主要介绍诙谐版——单链表的合并√,逆置√,循环链表及判断√,现在分享给大家,希望可以做个参考。

文章目录

    • 单链表的合并
    • 链表逆置①(有头结点)
    • 无头结点的链表逆置②
    • 链表循环
    • 循环判断

单链表的合并

Link Hebing(Link Ahead,Link Bhead)
{
	Link Chead;
	Node *p,*q,*r;
	p=Ahead->next;
	q=Bhead->next;
	r=Chead=Ahead;
	while(p&&q)	
	{
		if(p->data <= q->data)
		{
			r->next=p;
			r=p;
			p=p->next;
			
		}
		
		else
		{
			r->next=q;
			r=q;
			q=q->next;	
		 } 
	}
	if(p) {
	r->next=p;
	}
	if(q) {
	r->next=q;
	}
	free(Bhead);
	return 	Chead;
}
//合并链表 

链表逆置①(有头结点)

void Nizhi(Link head)//队首队尾全体置换 
{
	Node *p,*q;
	p=head->next;//找到首节点(第一个人) 
	head->next=NULL;//第一个人叫出来 
	while(p)//遍历该队 
	{
		q=p;//给队伍换名(位置顺序改变不是原来队伍) 
		p=p->next;//指向第二个人 
		q->next=head->next;//第二个人(队伍发生变化就换名)走到空前边的位置 
		head->next=q;//第一个人去第二个位 
	}
}

转置链表,原理和头插法一致

1 2 3 做置换
1 口 2 3
2 口 1 3
1 口 3 2
3 口 2 1

无头结点的链表逆置②

借助空节点 r 完成对链表的逆置

Link Reverse(Link head) {
	Node *p = head, *q, *r;
	q = r = NULL;
	while(p) { 
		q = p->next;	//q保存下一个节点指针
		p->next = r;	//p指向r
		r = p;
		p = q;
	} 
	return r;
} 

在这里插入图片描述

链表循环

void Createshuang(Link head)
{
	Node *p,*q;
	p=head;
	char name[20];
	int num;
	while(1)
	{
		scanf("%s",name);
		scanf("%d",&num);
		if(num==0)
			break;
		q=(Node*)malloc(sizeof(Node));
		strcpy(q->name,name);
		q->num=num;
		
		p->next=q;
		p=q;
	 } 				//循环链表的创建绝大部分和单向链表的尾插法创建一样;
	 p->next==head;//只有最后双向链表尾巴指向头结点,但是单向链表尾巴指向空 
}

//循环链表的创建绝大部分和单向链表的尾插法创建一样;
//只有最后双向链表尾巴指向头结点,但是单向链表尾巴指向空

如果作者思路对您有用的话,麻烦点个赞支持喔!

循环判断

bool Xunhuan(Link head) {
	Node *fast = head, *slow = head;
	while(fast && fast->next ) {
		fast = fast->next->next;
		slow = slow->next;
		if(fast == slow) {
			return true;
		}	
	}
	return false;
}

最后

以上就是沉默大地最近收集整理的关于诙谐版——单链表的合并√,逆置√,循环链表及判断√的全部内容,更多相关诙谐版——单链表内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(125)

评论列表共有 0 条评论

立即
投稿
返回
顶部