将i am a student 逆置为 student a am i

本文详细介绍了使用C语言进行字符串操作的方法,包括自定义字符串长度函数、字符串逆置及单词逆置等实用技巧,适用于初学者及有经验的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

int Mystrlen(const char* str)//字符串长度函数
{
	int count = 0;
	assert(*str != '\0');
	while (*str!= '\0')
	{
		count++;
		str++;
	}
	return count;
}
void resverse(char* left,char* right)//置换函数
{
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
void world(char *str)//分单词函数
{
	char *left = str;
	char *right = str + Mystrlen(str) - 1;
	resverse(left, right);//整体逆置
	char *cur = str;

	while (*cur != '\0')
	{
		char *start = cur;
		while (*cur != ' '&& *cur != '\0')
		{
			cur++;
		}
		resverse(start, cur - 1);//单词逆置
		if (*cur == ' ')
		{
			cur++;
		}
	}
}
int main()
{
	char str[20] = "i am a student";
	world(str);
	printf("%s\n",str);
	system("pause");
	return 0;
}
### 三节点交换法反转单链表 在单链表的操作中,反转链表是一个常见的需求。通过三节点交换法可以有效地实现这一目标。以下是具体的实现方式以及相关说明。 #### 单链表的定义 单链表是一种线性数据结构,其中每个节点由两部分组成:`data` 和 `next`。其存储结构如下所示[^1]: ```c typedef struct LNode { ElemType data; // 结点的数据域 struct LNode *next; // 结点的指针域 } LNode, *LinkList; ``` #### 反转链表的核心思路 为了使用三节点交换法来反转单链表,核心思想是依次调整三个连续节点之间的连接关系。具体来说,假设当前处理的是节点 A、B 和 C,则需要将 B 的 `next` 指向 A,而原本指向 C 的链接暂时保存下来以便后续继续遍历。 #### 实现代码 下面提供了一个基于三节点交换法的单链表反转函数实现: ```c void reverseLinkedList(LinkList *head) { if (*head == NULL || (*head)->next == NULL) { // 如果链表为空或者只有一个节点,则无需反转 return; } LinkList prev = NULL; // 前驱节点 LinkList current = *head; // 当前节点 LinkList next_node = NULL; // 后继节点 while (current != NULL) { next_node = current->next; // 记录下一个节点的位 current->next = prev; // 将当前节点的 next 指向前驱节点 prev = current; // 移动 prev 到当前节点位 current = next_node; // 移动到下一个节点 } *head = prev; // 更新头节点为新的首节点 } ``` 上述代码实现了整个链表的反转逻辑。特别需要注意的是,在循环结束之后,原链表中的最后一个节点会成为新链表的第一个节点,因此最后一步要更新头指针。 #### 时间复杂度与空间复杂度分析 - **时间复杂度**: O(n),因为只需要一次遍历即可完成全部操作。 - **空间复杂度**: O(1),只用了常量级额外的空间用于临时变量存储。 #### 注意事项 当调用此函数时,请注意传入参数应是指向头指针的地址(即双重指针),这样才能修改原始链表头部的实际值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值