美文网首页算法
链表相关算法题

链表相关算法题

作者: 嘿晴天 | 来源:发表于2020-06-18 11:53 被阅读0次

从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)

题目解读:题目的大致意思链表是单向的,例如链表数值是 1,2,3,4,5,6
解题思路:我们需要可以反向输出为6,5,4,3,2,1 很明显我们通过链表是无法反向输出因为他是单向的,所有考虑例如栈的结构,存储数值,然后利用栈的特性,先进先出,也就是逐个遍历链表,一一入栈,然后在将一一出栈,每次都去获取栈顶,将其放入vector中下面是具体的代码实现

class Solution {
public:
    vector<int> reversePrint(ListNode* head) {
       stack <int> s;

       while (head != NULL) {
           s.push(head->val);
           head = head->next;
       }

       vector <int> vec;
       while (!s.empty()) {
           vec.push_back(s.top());
           s.pop();
       }

       return vec;
    }
};

链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。

题目解读:由于链表是单向的,所以你无法知道距离末尾节点,倒数的节点,这时候需要通过一个辅助节点来帮你,节点1先向后移动指向到正着数第k个节点,然后跟着节点2指向头节点,节点1和节点2一起像后移动,则当节点指向尾节点时,节点2指向的是倒数第k个节点

class Solution {
public:
    ListNode* getKthFromEnd(ListNode* head, int k) {
        ListNode* p = head;
        ListNode* p1 = head;
        
        int j = 0;

        while (p != NULL) {
            if (j < k) {
                j++;
            } else {
                p1 = p1->next;
            }

            p = p->next;
        }

        return p1;
    }
};

反转链表
示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

解题思路:反转链表需要需要节点cur记录当前节点, 一个节点pre记录上一个节点,所以当cur->next = pre 这时候就实现了反转了,当这时候也需要一个临时变量使cur节点可以向后移动,则先用temp = cur->next, 可以看看具体的代码实现

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *cur = head;
        ListNode *pre = NULL;
        ListNode *temp = NULL;

        while (cur != NULL) {
            temp = cur->next;
            cur->next = pre;
            pre = cur;
            cur = temp; 
        }

        return pre;
    }
}

最后这里return pre是以为当前节点cur = temp 跳出循环这时候 cur 指向了null,也就是尾节点多向后移动了一位,pre 是 cur的上一个节点才是真正的最后一位所以return pre;

相关文章

  • 链表相关算法题

    从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回) 题目解读:题目的大致意思链表是...

  • 数据结构与算法学习-链表下

    前言 上一篇文章讲了链表相关的概念,这篇主要记录的是和链表相关的算法以及一些写好链表算法代码相关的技巧。 实现单链...

  • Tourist with Data Structure Seco

    链表 读题要仔细,只看题干,容易死的很惨。 设计链表 环形链表 一般环形链表使用快慢指针方式去做,快慢指针算法。参...

  • 数据结构与算法-链表相关题

    数据结构预算法题 正确的解算法题,前提是要正确审题,找出关键词! 题⽬1 : 将2个递增的有序链表合并为⼀个链表的...

  • ARTS 20201208-1215

    Algorithm: 每周至少做一个 LeetCode 的算法题算法题:1 剑指 offer 24: 翻转链表递归...

  • python链表及算法

    实现了python单向链表及一些算法题

  • 单链表

    单链表一些相关的算法集锦,单链表的算法可以提高逻辑能力。 反转链表 最基本的链表的题目,很简单的迭代操作,需要注意...

  • 算法-链表之复杂算法题

    好多天没有更新文章,今天更新的是链表的复杂算法题,这一篇完了之后,链表相关的也结束了,会进入下一个环节。 圆圈中最...

  • 单向链表相关算法题(C++)

    根据上一篇链表创造个管理对链表的理解(https://www.jianshu.com/p/d1fdc35e7546...

  • 希望变得熟练,然后游刃有余

    链表的算法题还是不是很熟啊,虽然今天的反转链表的题已经写的相对熟练了,可是还是不够理解,晚上接雨水这道题倒...

网友评论

    本文标题:链表相关算法题

    本文链接:https://www.haomeiwen.com/subject/qsnyxktx.html