浙大数据结构第二版 习题3.5 求链表的倒数第m个元素 答案错了一点

ElementType Find( List L, int m )
{
    List p1 = L;
    List p2 = L;
    List pLast = NULL;
    int c = 0;
    while (p1) {
        if (c == m) {
            p2 = L;
        }
        p1 = p1->Next;
        p2 = p2->Next;
        pLast = p2;
        c++;
    }
    if (c > m)
        return pLast->Data;      else
        return -1;
}

  

ElementType Find( List L, int m )
{
    List pCurrent = L;
    List pFind = L;
    for (int i =0; i<m;i++)
        if (pCurrent)
            pCurrent = pCurrent->Next;
        else
            return -1;
    while (pCurrent) {
        pFind = pFind->Next;
        pCurrent = pCurrent->Next;
    }
    return pFind->Data;
}

  

时间: 2024-10-26 04:07:29

浙大数据结构第二版 习题3.5 求链表的倒数第m个元素 答案错了一点的相关文章

PTA 求链表的倒数第m个元素

6-7 求链表的倒数第m个元素 (20 分) 请设计时间和空间上都尽可能高效的算法,在不改变链表的前提下,求链式存储的线性表的倒数第m(>)个元素. 函数接口定义: ElementType Find( List L, int m ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typed

测度论讲义严加安第二版习题参考解答

第1章 集类与测度 1.1 集合运算与集类 [测度论讲义严加安第二版习题参考解答]1.1.1

求链表的倒数第N个节点

最近看一本书上有求链表的倒数第N个节点,简单实现了下 链表,实现方案如下 1.不借助链表长度顺序遍历倒数第N个节点 GetReserveN就是如此实现. 2.当然如果链表记录了节点长度也可以直接正序遍历出来 第lenth-N个节点就是倒数节点. template<class T> class LinkedList { public: operator T(){return m_data;} virtual ~LinkedList() { if(m_size!=0) Clear(); } voi

求链表的倒数第k个节点

问题描述:给定一个链表的头节点,求出链表的倒数第k个节点. 分析:这是链表里的经典问题,存在多种解法,下面给大家分享下我的想法. 解法一:很直观的一种做法是从头到尾扫描链表,然后求倒数第k个,但是由于单链表无法从尾部向头部扫描, 因此可以借助其他的辅助空间去存储扫描过的所有节点,例如,数组或栈均可. 解法二:计算出链表中节点的总数为n,根据k 将其转化为正数的第n-k+1个节点,然后在从链表头开始走n-k+1个节点,就是所求. 解法三:可以设置两个指针实现,假设两个指针分别为p1和p2,p1从链

12,求链表的倒数第k个节点《剑指offer》

题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 两个指针一个先走k步,然后两个一起走,先走的到达终点时后一个指向的就是所求的节点,注意可能长度小于k,这时候应该返回null 代码: /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindKthToTail(ListN

深入理解计算机系统第二版习题解答CSAPP 2.8

给出位微量的布尔去处的求值结果. 运算 结果 a 0110 1001 b 0101 0101     ~a 1001 0110 ~b 1010 1010     a&b 0100 0001 a|b 0111 1101 a^b 0011 1100

[测度论讲义严加安第二版习题参考解答]1.1.4

若 $\calC$ 同时为代数和单调类或同时为 $\pi$ 类和 $\lm$ 类, 则 $\calC$ 为 $\sigma$ 代数. 证明: $$\bex \va{n} A_n=\va{n} (A_1\cap \cdots A_n);\quad \va{n} A_n=\sex{\vu{n} A_n^c}^c =\sex{\vu{n}(A_1^c\cup \cdots \cup A_n^c)}^c. \eex$$

深入理解计算机系统第二版习题解答CSAPP 2.13

从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入都是一个数据字x和一个掩码字m.它们生成一个结果z,z是由根据掩码m的位来修改x的位得到的.使用bis指令,这种修改就是在m为1的每个位置上,将z对应的位设置为1.使用bic指令,这种修改就是在m为1的每个位置,将z对应的位设置为0. 只使用这两个函数实现C语言的按位|和^运算. 1 int bis

深入理解计算机系统第二版习题解答CSAPP 2.6

使用打印字节的方式可以知道十进制数12345的十六进制为0x00003039,十进制浮点数12345.0的十六进制为0x4640E400. 转换为二进制为 1 /* 2 0 0 0 0 3 0 3 9 3 00000000000000000011000000111001 4 ************* 5 4 6 4 0 E 4 0 0 6 01000110010000001110010000000000 7 8 */ 移动后有13位匹配. 已知十进制数3510593的十六进制为0x003591