算法--链表的K逆序问题】的更多相关文章

转载请标明出处http://www.cnblogs.com/haozhengfei/p/9e6f4dda3138cf9fab17f996ec85b624.html 链表的K逆序问题     链表的k逆序 第7节 链表的k逆序练习题 有一个单链表,请设计一个算法,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点.例如链表1->2->3->4->5->6->7->8->null,K=3这个例子.调整后为,3->2->1->…
数据结构实验之链表二:逆序建立链表 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description 输入整数个数N,再输入N个整数,按照这些整数输入的相反顺序建立单链表,并依次遍历输出单链表的数据. Input 第一行输入整数N;:第二行依次输入N个整数,逆序建立单链表. Output 依次输出单链表所存放的数据. Sample Input 10 11 3 5 27 9 12 43…
数据结构实验之链表二:逆序建立链表 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入整数个数N,再输入N个整数,按照这些整数输入的相反顺序建立单链表,并依次遍历输出单链表的数据. Input 第一行输入整数N;: 第二行依次输入N个整数,逆序建立单链表. Output 依次输出单链表所存放的数据. Sample Input 10 11 3 5 27 9 12 43 16 84 22 Sample Output 2…
题目链接 #include <bits/stdc++.h> using namespace std; struct node { int data; struct node *next; }; int main() { int n; struct node *head,*p; head = new node; head -> next = NULL; scanf("%d",&n); for(int i = 0; i < n; i ++) { p = ne…
逆序KMP,真的是强大! 参考链接,下面有题意解释:http://blog.sina.com.cn/s/blog_6ec5c2d00100tphp.htmlhttp://blog.csdn.net/sdjzping/article/details/8857749http://tech.ddvip.com/2013-09/1380477442203505.html 直接暴力是枚举字符串的后面13个的字母,然后再用KMP匹配,这样的话,就绪要枚举多次,分别是后面的13,12,11....1个字母.但…
算法训练 字串逆序   时间限制:1.0s   内存限制:512.0MB      问题描述 给定一个字符串,将这个串的所有字母逆序后输出. 输入格式 输入包含一个字符串,长度不超过100,字符串中不含空格. 输出格式 输出包含一个字符串,为上面字符串的逆序. 样例输入 tsinsen 样例输出 nesnist   #include<stdio.h> #include<string.h> main(){ ]; gets(a); int len=strlen(a); ;i--){ p…
题目 给定一个单链表的头结点,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点. 解答 使用栈结构 import java.util.Stack; public class Test{ static class Node{ public int val; public Node next; public Node(int val){ this.val=val; } } public static void main(String[] args) {…
给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点 思路: 如果k的值小于2,不调整.k<1 没有意义,k==1代表1个节点为1组进行逆序,原链表不变. 介绍两种方法: 方法一  利用栈结构 1.从左到右便利链表,如果栈的大小不等于k,就将节点不断压入栈中 2.当栈大小第一次到达k,凑齐了k个节点进行逆序.然后弹出,并且连接.第一组逆序完成后,记录新的头,同时第一组最后一个(原头)连接下一个节点 package TT…
单链表逆序输出也是常被面试官问到题算法题,所以自己就总结了一下,在此贴出算法,与小伙伴们相互交流. 首先要有三个指针,前两个分别指向首节点,首节点的下一个节点,第三个是临时指针,是为了储存首节点的下一个节点的下一个节点,防止链表断裂 图1 输出函数一共两个参数,第一个是链表本身,第二是K值 首先让new等于头结点的next节点,old为new结点的next节点 为了让逆序输出,必须定义一个计数器count,count初值为1,用于终止循环的条件. 每次循环,必须先指定temp节点为old的nex…
[说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中“将单链表的每K个节点之间逆序”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解析说明,具体的问题解析请参考原书. 感谢左程云老师的支持. [题目]: 给定一个单链表的头节点 head,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点. 例如: 链表:1->2->3->4->5->6->7->8->N…
前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获.每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢. 注:如果代码排版出现了问题麻烦通知我下,谢谢. [题目描述] 给定一个单链表的头节点head, 实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点. 例如: 链表:1->2->3->4->5->6->7->8->null, K = 3. 调整后:3-&g…
样例 链表1-2-3-4-5-6-7-8-9-10 K=3 ,结果 3-2-1-6-5-4-9-8-7-10 java代码 /** * @Description:将单链表每K个节点之间逆序 * @Author: lizhouwei * @CreateDate: 2018/4/7 9:10 * @Modify by: * @ModifyDate: */ public class Chapter2_12 { public Node reverseK(Node head, int k) { if (h…
题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路:  两个指针,起始位置都是从链表头开始,第一个比第二个先走K个节点,当第一个走到链表尾时,第二个指针的位置就是倒数第k个节点.(两指针始终相聚k个节点) 注意边界条件: 1.链表不能一开始就是空的. 2.当链表只有5个节点时,若k=5,则返回第1个节点:若K>5,统一返回NULL. 边界条件十分影响case通过率!!! #include "../stdafx.h" #include <stdio.h> #in…
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.1 如何实现链表的逆序 [腾讯笔试题] 难度系数:⭐⭐⭐ 考察频率:⭐⭐⭐⭐ 题目描述: 给定一个带头结点的单链表,请将其逆序.即如果单链表原来为 head -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7,那么逆序后变为 head -> 7 -> 6 -> 5 -> 4 ->…
[题目]给定一个单链表的头节点head,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点.例如:链表:1->2->3->4->5->6->7->8->null,K = 3.调整后为:3->2->1->6->5->4->7->8->null.其中7.8不调整,因为不够一组.[解题思路]方法一:使用栈,每K个节点依次入栈,并依次删除然后栈弹出尾插法插入节点方法二:直接…
将单链表的每K个节点之间逆序 给定一个单链表的头节点head,实现一个调整链表的函数,使得每K 个节点之间逆序,如果最后剩下不够K 个节点,则不调整最后几个. 例如: 链表:1—>2—>3—>4—>5—>6—>7—>8—>null,k=3. 调整好后:3—>2—>1—>6—>5—>4—>7—>8—>null,其中7.8不调整,因为不够一组. [解析] 1. 首先从左到右遍历链表,如果栈的大小不等于k ,则不断的…
题目描述 给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点. 题解 内部函数reverse实现链表beg到end的翻转,以及与l和r的连接. 外部函数reverseKNodes实现区间的移动(即四个实参的更新),以及整个链表头节点的赋值. 时间复杂度O(n),额外空间复杂度O(1) 代码 public class Main { public static void main(String args[]) { Nod…
什么也不说, 直接上代码: 功能点有: 1, 获取尾结点 2, 添加(添加节点到链表的最后面) 3, 添加(根据节点的no(排名)的大小, 有序添加) 4, 单向链表的 遍历 5, 链表的长度 6, 删除某一个节点 7, 更换指定位置的节点 8, 查询第n个节点 9, 查询倒数第n个节点 10, 链表反转, 使用递归实现 11, 逆序打印 12, 合并二个有序链表, 且结果仍然是有序的 //英雄节点 class HeroNodeLv{ public int no;//英雄排名 public St…
数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个). 输入 第一行输入元素个数n: 第二行输入n个整数. 输出 第一行输出初始链表元素个数: 第二行输出按照逆位序所建立的初始链表: 第三行输出删除重复元素后的单链表元素个数: 第四行输出删除重复元素后的单链表. 示例输入 10 21 30 14 55 32 63…
如题 动手之前,发现自己很擅长用C语言来写链表. 不过,既然自己做的是Java开发,那么还是用Java实现这个算法吧:毕竟,以后的若干年里都差不多要跟Java打交道了. 于是,先将Java版的链表自学了一下,其实思想差不多; 用对象替换C语言中的指针建立,特别简单又舒服! 然后逆序输出,再实现这个题目. 01. 先学着实现一个简单的Java版的单项链表 构建任意长度的任意数值的链表, 头插法,顺序遍历输出链表 package com.szs.list; /** * 单链表 * @author A…
0 问题描述 原题点击这里. 将单向链表第m个位置到第n个位置倒序连接.例如, 原链表:1->2->3->4->5, m=2, n =4 新链表:1->4->3->2->1 (注:最终的新链表记为head,过程中临时使用的一个链表头记为h) 1 基本思路 首先考虑整个链表的情况.见到单向链表的第一反应自然是轮询链表head中每个节点,轮询过程中按需要建立一个新链表h,每次访问一个节点,就将这个节点放在前一个访问的节点之后,这样便实现了倒序. 然后再考虑部分倒…
多写了个逆序链表 /************************************************************************* > File Name: 03_Pirnt_LinkList.c > Author: Juntaran > Mail: JuntaranMail@gmail.com > Created Time: 2016年08月24日 星期三 02时04分25秒 **********************************…
/************************************************************************* > File Name: 14_ReverseListNode.cpp > Author: Juntaran > Mail: JuntaranMail@gmail.com > Created Time: 2016年08月30日 星期二 15时47分32秒 ****************************************…
#include <stdio.h> #define END_elem 0 struct node { int date; struct node * next; }; //链表创建 node * creat() { int x;     node *head,*last,*p;     head=new node();     last=head; scanf("%d",&x); while(x!=END_elem) {         p=new node();…
题目:将一个有链表头的单向单链表逆序 分析: 链表为空或只有一个元素直接返回: 设置两个前后相邻的指针p,q,使得p指向的节点为q指向的节点的后继: 重复步骤2,直到q为空: 调整链表头和链表尾: 图解: 以链表A->B->C->D为例,逆序此链表. 0.初始状态                                                        1.2.3 循环部分 p = head->next;                             …
一,数据结构——链表全操作: 链表形式: 其中,每个节点(Node)是一个结构体,这个结构体包含数据域,指针域,数据域用来存放数据,指针域则用来指向下一个节点: 特别说明:对于单链表,每个节点(Node)可以通过指针域(Node *next)来找到下一个节点,但却不能够找到上一个节点: 只需要知道头结点就可以确定整个链表: 对链表进行的操作一般都需要遍历链表,而链表结束的标志为NULL(要么next指针为空,要么头结点为空): 若要断开两个节点联系,要先保存下个节点,否则后面的节点无法找到: 关…
讨论内容不说明,仅提供相应的程序. 2.1:归并插入排序θ(nlgn) void mergeInsertionSort(int a[], int l, int r, int k) { int m; > k) { m = (l + r) / ; mergeInsertionSort(a, l, m, k); mergeInsertionSort(a, m+, r, k); merge(a, l, m, r); } else if(l < r) insertSort(a, l, r); } voi…
1 逆序输出的数列(10分) 题目内容: 你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束.然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1. 输入格式: 一系列正整数,输入-1表示结束,-1不是输入的数据的一部分. 输出格式: 按照与输入相反的顺序输出所有的整数,每个整数后面跟一个空格以与后面的整数区分,最后的整数后面也有空格. 输入样例: 1 2 3 4 -1 输出样例: 4 3 2 1 时间限制:2000ms内存限制:128000kb…
N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列.设计加密解密算法,且要求K<=15*N. 如果是: N<=16,要求K<=16*N. N<=16,要求K<=10*N. N<=64,要求K<=15*N. #include <iostream> using namespace std; void printArray(int* arr, int len…