Linux内核之vmlinux与vmlinuz

【题目】

原文:

2.2 Implement an algorithm to find the nth to last element of a singly linked list.

译文:

实现一个算法从一个单链表中返回倒数第n个元素。

【分析】

(1)创建两个指针p1和p2,指向单链表的开始节点。

(2)使p2移动n-1个位置,使之指向从头开始的第n个节点。(意思是就是使p1和p2距离n个位置)

(3)接下来检查p2 - > = = null 如果yes返回p1的值,否则继续移动p1和 p2 如果接下来p2为null意味着p1指向从结尾开始计算的第n个节点。

(4)重复第三步

【代码】

/*********************************
*   日期:2014-5-18
*   作者:SJF0115
*   题目: 寻找单链表倒数第n个元素
*   来源:CareerCup
**********************************/
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

ListNode* nthToLast(ListNode* head,int n){
    //head 带有头结点的单链表
    if(head->next == NULL || head == NULL || n <= 0){
        return NULL;
    }
    int i;
    ListNode* p1 = head->next;
    ListNode* p2 = head->next;
    //p2移动n-1个位置
    for(i = 1;i <= n-1;i++){
        //总共元素不到n个
        if(p2 == NULL){
            return NULL;
        }
        p2 = p2->next;
    }
    //p2移动至末尾则p1移动到倒数第n个元素
    while(p2->next != NULL){
        p1 = p1->next;
        p2 = p2->next;
    }
    return p1;
}

int main(){
    int i,j;
    //freopen("C:\\Users\\XIAOSI\\Desktop\\acm.txt","r",stdin);
    ListNode *head = (ListNode*)malloc(sizeof(ListNode));
    head->next = NULL;
    ListNode *node;
    ListNode *pre = head;

    int A[] = {6,5,3,3,6,5,6,7,3,7,1,2,1,4,6,7,2,3};

    for(int i = 0;i < 18;i++){
        node = (ListNode*)malloc(sizeof(ListNode));
        node->val = A[i];
        node->next = NULL;
        pre->next = node;
        pre = node;
    }

    node = nthToLast(head,18);
    if(node != NULL){
        cout<<node->val<<endl;
    }
    else{
        cout<<""<<endl;
    }
    return 0;
}

Linux内核之vmlinux与vmlinuz,布布扣,bubuko.com

时间: 2024-10-20 10:00:24

Linux内核之vmlinux与vmlinuz的相关文章

以Qemu模拟Linux,学习Linux内核

文章名称:以Qemu模拟Linux,学习Linux内核作      者:five_cent文章地址:http://www.cnblogs.com/senix/archive/2013/02/21/2921221.html维护日志:2013-02-21 建立文档(注:文章参考自http://www.linuxidc.com/Linux/2011-07/39373.htm, 是对该篇文章的一些补充和说明.文章内所使用的环境是Ubuntu 12.04,如果其中遇到编译问题,请自行参考错误说明,配置依赖

用uboot 烧写uboot linux内核 文件系统到nandflash的 过程以及bootm go命令启动与区别

原文:http://blog.sina.com.cn/s/blog_6b94d5680100nd48.html 文章结构结构顺序有变化-1:烧写uboot0: bootargs bootcmd 命令参数的设置1:制作yaffs2的过程2:烧写yaffs2的过程3:制作uimage 的过程4: 烧写uiamge的过程5:uimage zimage vmlinux 的区别6: uboot传递给内核的参数结构 tag7:bootm go 的 启动过程 以及区别8:加载地址 入口地址 等 ///////

uboot学习之五-----uboot如何启动Linux内核

uboot和内核到底是什么?uboot实质就是一个复杂的裸机程序:uboot可以被配置也可以做移植: 操作系统内核本身就是一个裸机程序,和我们学的uboot和其他裸机程序没有本质的区别:区别就是我们操作系统运行起来后可以分为应用层和内核层,分层后,两层的权限不同,内存访问和设备操作的管理上更加精细(内核可以随便方位各种硬件,而应用程序只能被限制的访问硬件和内存地址) 直观来看:uboot的镜像是u-boot.bin,Linux系统的镜像是zImage,这两个东西其实都是两个裸机程序镜像.从系统启

Linux 内核开发—内核简单介绍

内核简单介绍 Linux 构成 Linux 为什么被划分为系统空间和内核空间 隔离核心程序和应用程序,实现对核心程序和数据的保护. 什么内核空间,用户空间 内核空间和用户空间是程序执行的两种不同的状态,Linux对自身软件系统进行了划分,一部分核心的软件独立于普通的软件,拥有特权级别,可以訪问平台的全部硬件和资源,称为"内核空间".而普通的软件执行在"用户空间",它仅仅拥有有限的系统资源,不能直接訪问内核空间和硬件资源. 将系统分为"内核空间"和

linux内核编译相关

参考:http://www.arm.linux.org.uk/docs/kerncomp.php 一. 内核编译1) linux 2.4make clean/make mrpropermake depmake zImagemake modules //编译模块2) linux 2.6make clean/make mrpropermake // 编译内核同时编译了模块3) 模块安装上述步骤完成后,模块分布在各个内核目录下,通过下面命令安装到具体目录下:make modules_install I

【内核】几个重要的linux内核文件【转】

转自:http://www.cnblogs.com/lcw/p/3159394.html Preface 当用户编译一个linux内核代码后,会产生几个文件:vmlinz.initrd.img, 以及System.map,如果配置过grub引导管理器程序,会在/boot目录下看到这几个文件. vmlinuz vmlinuz是可引导的.压缩的内核文件. 该文件包含了一个最小功能的内核,在PC上通常是先执行vmlinuz,之后加载initrd.img文件,最后加载根分区. 实际上initrd.img

用KGdb和VMware调试Linux内核,System Call

Linux的内核和System Call不好调试,参考这里: http://stackoverflow.com/questions/5999205/cannot-step-into-system-call-source-code 简单来说,如果想在本机调试system call,那么当你进入system call时,系统已经在挂起状态了,那么它又怎样能响应用户的输入? 所以,有一个UML(http://user-mode-linux.sourceforge.net/)的方式,把内核当成一个进程启

linux 内核参数图解

http://blog.csdn.net/maimang1001/article/details/34941471 https://www.suse.com/documentation/sles11/book_sle_tuning/data/sec_tuning_network_buffers.html http://dirtysalt.info/os.html Linux Table of Contents 1. vmlinuz 2. TCP IO 2.1. create connection

Linux内核调试方法总结

一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2  dump_stack() 五  printk() 1  printk函数的健壮性 2  printk函数脆弱之处 3  LOG等级 4  记录缓冲区 5  syslogd/klogd 6  dmesg 7 注意 8 内核printk和日志系统的总体结构 9  动态调试 六  内存调试工具 1  MEMWATCH 2  YAMD