跳转至

阿里

翻转链表中第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。

多组的同理。