阿里
翻转链表中第x个节点到第y个节点的部分¶
x,y满足1 ≤ x ≤ y ≤ 链表长度
样例 例1:
输入: 1->2->3->4->5->NULL, x = 2 and y = 4, 输出: 1->4->3->2->5->NULL. 例2:
输入: 1->2->3->4->NULL, x = 2 and y = 3, 输出: 1->3->2->4->NULL.
//Type是节点ListNode中的数据类型,使用模版。
//link就是指向的下一个节点的指针。
template<class Type>
void List<Type>::Invert(int x, int y)
{
if (x < 1 || x > y || y > length()) return;
//两个指针 一个指向翻转开始的那个节点,一个指向翻转结束的节点
ListNode<Type> *begin = null, *end = null;
ListNode<Type> *curr = first;//当前节点
for (int i = 0; i < x - 1; i++) {//开始的节点
curr = curr->link;
}
begin = curr;
for (int i = 0; i < y - x; i++) {//结束的节点
curr = curr->link;
}
end = curr;
//翻转
curr = begin;
ListNode<Type> *prev = begin, *next = null;
while (curr != end) {
next = curr->link; //当前节点的下一个节点
curr->link = prev; //下一个节点的link指向前一个节点
prev = curr; //保存前一个节点
curr = next;
}
}
题目二【分数计算】现在给你 n 个分数 xi/yi,想让你计算一下相加后的答案是否是整数。 输入描述:
输入的第一行有一个整数T ,接下来 T 组,每组第一行有一个整数 n ,接下来 n 行,每行有 2个整数 xi,yi。
数据范围:1≤T≤10,1≤n≤10^4,1≤xi,yi≤999 输出描述: 对于每一组测试数据, 如果计算的答案是整数, 则输出Yes, 否则输出No 示例1: 输入 2 3 1 2 1 3 1 6 4 1 2 3 4 5 6 7 8 输出 Yes No
每一组:n行
两个数组,一个数组中放分子,一个数组中放入分母。两个数组的长度是n。
开始时:定义两个变量 分子a是0,分母b是1。
从两个数组中取第一个元素,计算的结果:分子放到a,分母赋值给b,如果a和b相等 则把a变为0,b变为1。
从两个数组中取第二个元素,计算的结果:分子放到a,分母赋值给b,如果a和b相等 则把a变为0,b变为1。
一直递归到两个数组的最后一个元素,计算的结果:分子放到a,分母赋值给b。
如果a等于b则返回YES,否则返回NO。
多组的同理。