精华内容
下载资源
问答
  • 解法,我也是这里学的,博客只是说一下自己的理解挺有意思的,返回的是倒数的元素,假设是正数的,我们可以头数,但是倒数的,会不会想把这个单链表翻转一下呢??还是先遍历链表数好总数然后再数(总数-n个)?...

    解法,我也是从这里学的,博客只是说一下自己的理解

    挺有意思的,返回的是倒数的元素,假设是正数的,我们可以从头数,但是倒数的,会不会想把这个单链表翻转一下呢??还是先遍历链表数好总数然后再数(总数-n个)?
    其实说白了就是能倒着数n个就行了,有没有想到栈?先进后出?全进了之后开始数N个?进一步的,递归!而且递归能够节省空间啊。

    解法二:设置两个指针,控制他们的距离为N,然后先后遍历链表,等前指针遍历到末尾的时候,后指针指向的就是所求节点(五体投地)

    展开全文
  • 倒数第k个就是正数第n-k+1个,从第一个结点第n-k+1个结点一共要走n-k步,第k+1个结点n+1个结点也是n-k步,从第一个结点第k+1个结点,走k步 代码: # -*- coding:utf-8 -*- # class ListNode: # d...

    描述:

    输入一个链表,输出该链表中倒数第k个结点。

    思路:

    双指针,p1先走k步,然后同时走,p1到头时候返回p2

    倒数第k个就是正数第n-k+1个,从第一个结点到第n-k+1个结点一共要走n-k步,从第k+1个结点到n+1个结点也是n-k步,从第一个结点到第k+1个结点,走k步

    代码:

    # -*- coding:utf-8 -*-
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution:
        def FindKthToTail(self, head, k):
            # write code here
            if not head:
                return None
            p1 = head
            p2 = head
            l = k
            while l > 0:
                try:
                    p1 = p1.next
                    l -= 1
                except:
                    return None
            while p1:
                p1 = p1.next
                p2 = p2.next
            return p2

    结果:

    运行时间:26ms

    占用内存:5848k

    展开全文
  • 一个先不动,另一个指针先跑k-1步(注意:此时,第一个指针跑了k-1,其实此时这个指针距离第二个指针为k),然后,两个指针同时往后跑就行了,他们的距离为k,直到前面的指针跑末尾,另一个指针指向的就是倒数第K...

    这题就一个思路问题,想到了就容易,想不到就感觉很难,容易从超高时间复杂的角度来考虑问题。
    思路:倒数第K个节点,其实也就是正数第Length-k+1个节点。
    因此,两个指针就完事了,一个先不动,另一个指针先跑k-1步(注意:此时,第一个指针跑了k-1,其实此时这个指针距离第二个指针为k),然后,两个指针同时往后跑就行了,他们的距离为k,直到前面的指针跑到末尾,另一个指针指向的就是倒数第K个节点。
    代码:

    public static int getDaoShuK(int k,LinkNode pre,LinkNode behind) {
    		for(int i=0;i<k-1;i++) {
    			pre=pre.next;
    		}
    		while(pre.next!=null) {
    			pre=pre.next;
    			behind=behind.next;
    		}
    		return behind.value;
    	}```
    
    
    展开全文
  • 为了符合大多数人的习惯,本题1开始计数,即链表的尾结点是倒数第1个结点。例如个链表有6个结点,从头结点开始它们的值依次是1,2,3,4,5,6。这个链表的倒数第3个结点是值为4的结点。 练习地址 实现 倒数第k...

    题目描述

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

    实现

    倒数第k,正数n-k+1
    方法:遍历一次,避免计算长度
    两个指针p1,p2,保持k-1的距离,p1走到尾,p2为倒数k

    /** 21 链表中倒数第K个节点*/
    public class C22_list_FindTailK {
        public static class ListNode {
            int val;
            ListNode next;
            ListNode(int x) { val = x; }
        }
        //倒数第k,正数n-k+1
        //遍历一次,两个指针p1,p2,保持k-1的距离,p1走到尾,p2为倒数k
        public static ListNode tailK(ListNode head, int k) {
            if (head == null || k == 0) { return null; }
            ListNode p1 = head;
            ListNode p2 = null;
            for(int i =0;i<k-1;i++){ //a指针先走k-1
                if(p1.next!=null){
                    p1=p1.next;
                }else {
                    return null;
                }
            }
            p2=head;
            while (p1.next!=null){//a,b同时走
                p1=p1.next;  //a走到尾
                p2=p2.next;  //b为倒数第K个
            }
            return p2;
        }
    }
    

    Test

     public static void main(String[] args) {
            ListNode node1 = new ListNode(1);
            ListNode node2 = new ListNode(5);
            ListNode node3 = new ListNode(7);
            node1.next = node2;
            node2.next = node3;
            System.out.println(tailK(node1,1).val);
    
        }
    

    实现

    20210203
    // 遍历了2遍,不推荐

    //执行用时:0 ms, 在所有 Java 提交中击败了100.00%的
    //用户内存消耗:36.3 MB, 在所有 Java 提交中击败了34.39%的用户
    class Solution {
        public ListNode getKthFromEnd(ListNode head, int k) {
            if(head==null || k<=0) return null;
            ListNode node = head;
            int n =0;
            while(node!=null){
                n++;
                node =node.next;
            }
            for(int i=1;i<n-k+1;i++){
                head=head.next;
            }
            return head;
    
        }
    }
    
    
    展开全文
  • 假设个给定个链表,长度为 6,现在查找倒数第 2 个结点:给定两个指针, fast 和 slow 开始都让他们指向头结点首先,让 fast 指针先走到正数第 k 个结点,也就是走 k-1 步,这里 k=2,所以先让 fast 走1步这...
  • 首先,我们要清楚链表的长度length,这样的话,要删除倒数第n个节点的话,就是删除正数的第(length - n)个节点( 0 开始遍历链表)(当删除倒数第length的节点时例外,因为我们遍历链表的时候 0 开始,所以这...
  • public class Solution { /** * 分析 : * * 1、倒数第k个节点,即正数第length-k+1个节点,只需要第1个... * 3、所以从第一个节点,向前走length-k步,便会走到正数第length-k+1个节点, * * 4、
  • 1. 看到是单链表肯定不能反方向循环,倒数第k个节点,比如链表长度为6,倒数第三个也就是相当于正数第四个,符合6-3+1=4。 2. 所以就想到了正向遍历链表两次,但两次复杂度又太高,再考虑能不能遍历次,进而想到...
  • 输入个链表,输出该链表中倒数第k个结点。 解题思路 看到题目,我们直观的想法是链表头部依次遍历链表尾端,再尾端回溯k步。但只有双向链表才可以进行反向回溯,单链表显然是行不通的。求链表倒数第k个...
  • 题目描述 09年统考的源题,虽然都能得到**O(n)**的复杂度,不过满分做法是双指针,也就是指针扫遍,其余做法均10分。...指针1顺序扫到正数第k个节点,这时候开始指针2跟着指针1往后扫,当指针1到达尾部时,...
  • 题目:输入个链表,输出该链表中倒数第k个结点。 ...扫趟链表记录长度len,倒数第k个数就是正数len-k+1个,所以只需要给定的头节点再次遍历len-k步就了该节点 /* struct ListNode...
  • 思路:1、得到链表的长度,这样才能链表头部定位到倒数第k个结点,即正数len-k+1个结点。  2、正向遍历链表,直到len-k+1个结点,返回。 代码: /* public class ListNode { int val; ListNode next = ...
  • 思路1:求链表中倒数第k个节点,也就是正数第n-k+1个结点(假设1开始计数),此时最直观的做法就是从头开始遍历链表定位这个第n-k+1个结点即可。但是这种做法需要遍历链表2次,第1次遍历需要求得链表中结点总数...
  • 我们在做算法的时候或多或少都会遇到这样的问题,那就是我们需要获取某个数据集的倒数或者正数第几个数据。那么今天我们来看一下这个问题,怎么去获取倒数第K个节点。我们拿这个问题的时候自然而然会想到我们让...
  • 然后取最后三个数相乘(记作A),当有负数存在时,取第一个,第二个和倒数第一个数相乘(记作B) 比较A和B 取出大的。 思路非常简单但是,题目没给数的范围限制,数太大时,基本数据类型根本...
  • 思路:链表头到倒数第K个节点长度=正数第K个节点到链表尾,让p,q指向表头,先让p指针走到正数第K个节点,然后让P,q同时往后走,当p指针走到表尾时,q正好走到倒数第K个节点。 代码实现: ListNode* ...
  • 题目: 输入一个链表,输出该链表中倒数第K个节点。为了符合少数人的习惯...有两种解法,第一种是通过遍历单链表获取其总长度,然后让总长度M减去K加上1获得正数位置L,就是倒数第K个节点。但是这样需要循环两次。第二
  • lintcode 下个排列

    2019-02-17 11:01:20
    lintcode 下个排列 描述 给定个若干整数的排列,给出按正数大小进行字典序从小大排序后的下个排列。 如果没有下个排列,则输出字典序...从倒数第二个数开始,记为nums[i],从这个第i个数开始,往后所有的数...
  • 'lintcode 下个排列'

    2019-04-12 22:56:09
    lintcode 下个排列描述给定个若干整数的排列,给出按正数大小进行字典序从小大排序后的下个排列。 如果没有下个排列,则输出字典序最小的序列。 样例左边是原始排列,右边是对应...思路从倒数第二个数开始...
  • Linux常用命令总结

    2017-02-13 19:31:39
    本文总结日常工作中经常用到的linux命令,作为总结,以便学习和回顾。...abc 从倒数第一到正数第一行的遍历方式查找文件service.log中的字符串abc,并高亮显示.  b. vim service.log --&gt; /abc 从第一行到...
  • python切片

    2019-01-21 20:48:48
    python 切片 列表a下标0开始 第二行:列表头开始正数10个数,即a[0]–a[9] 第三行:列表倒数第五个最末尾 第四行:下标0下标5(不包含5) 第五行:同上 第六行:列表中,每隔三个取个数 ...
  • 一、切片 1、定义:  经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符...B[-3:] 取出倒数第三个到倒数第一个,都是负数的情况下,缺填的为-1(最后一个) C[1:10:2] 110,...
  • python的切片功能

    2020-11-09 10:33:39
    python切片功能的基本规则: L(start_index:end_index:step) ...为负数时,表示从倒数第n个数结束(不包括n);不填写时,为默认结束的位置才结束 step.表示步长。为整数。为正整数n时,表示从左向右,间隔n个数
  • LeetCode 15— 三数之和

    2019-02-23 19:43:23
    这里我们可以先做个剪枝优化,就是当遍历到正数的时候就break,为啥呢,因为我们的数组现在是有序的了,如果第一个要fix的数就是正数了,那么后面的数字就都是正数,就永远不会出现和为0的情况了。然后我们还要加上...
  • 628.三个数的最大乘积

    2020-02-04 16:26:27
    思路:小排序,取前面三个为方案一,取倒数后面的两个再取第一个为方案二;比较方案一和方案二的大小。情况(一、二、三)都是方案一或者方案二。 class Solution { public: int maximumProduct(vector<...
  • 毕业生自我鉴定简单范文参考借鉴 时间过得真快啊,大学生活转瞬即逝,在临近毕业对自己也有个鉴定。下面是由资料库网为大家整理的“大学毕业生自我鉴定”,仅供参考,...大一的倒数第大四上的正数第四,....
  • LeetCode--143. Reorder List

    2019-01-01 12:00:28
    今天是2019年1月1日,祝...要求将链表重组,意思是将链表(链表长度为n)倒数第一的节点(第n个节点)插在正数第一的元素后面,不是一般性的说:将第i个节点(i&gt;n/2)插入第(n-i+1)个节点的后面。 更直...
  • 大一的倒数第大四上的正数第四,也不能说勤奋刻苦了多少,是心态吧。大一刚来的时候,对考试充满了恐惧,考前,不是复习,而是担心,这样的成绩当然是好不哪里去的。经过四年的磨练,现在考前已经能够做到...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

从倒数第一到正数第一