boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 问个面试题
相关主题
删去单向LINKED LIST中的一个节点,假设HEAD is unknown
单链表构成的循环链表比单链表有什么优势?
讨论 找单链表倒数m的节点 (转载)
并口驱动的一个问题 (转载)
对指针很熟的高手能否给菜鸟分步骤讲解一下这个单链翻转是怎么实现的?
如何在gdb中遍历binary tree
find start point of loop from linked list
问个树遍历的线程化问题
C++ 无效语句?
好久没用C++了,想用静态变量写一个简单双向链表,一直报错
相关话题的讨论汇总
话题: inode话题: pfirst话题: null话题: head话题: next
进入Programming版参与讨论
1 (共1页)
j****9
发帖数: 2295
1
一次遍历找到单链表倒数第m个元素。
一道老题。
网上有code。看起来没什么问题。但也有人说这个不是一次遍历。求一次遍历的正解代码。
只是对于test case 怎么写不太清楚。
struct iNode {
int value;
iNode * next;
};
iNode * getresult(iNode * head,int n)
{
iNode *pfirst;
iNode *psecond;
pfirst=head;
int counter;
for(counter=0;counter pfirst=pfirst->next;
}
psecond=head;
while(pfirst!=NULL) {
pfirst=pfirst->next;
psecond=psecond->next;
}
return psecond;
}
j****9
发帖数: 2295
2
如果这个算是两次遍历的话。
谁能给个一次遍历的正解。急用。谢谢。
s***e
发帖数: 122
3
这个就是一次遍历,但是有一些bug, 没有考虑n<0以及链表长度小于n+1的情况。下面
是一些修改以及测试用例。
#include
struct iNode {
int value;
iNode * next;
iNode() { value = 0; next = NULL; }
iNode(int v) : value(v) { next = NULL; }
iNode(int v, iNode* nx) : value(v), next(nx) {}
};
iNode * getNthLastNode(iNode * head, int n) {
if (head == NULL || n < 0) return NULL;
iNode* pfirst = head;
for (int counter = 0; counter < n; counter++) {
if (pfirst->next != NULL)
pfirst = pfirst->next;

【在 j****9 的大作中提到】
: 如果这个算是两次遍历的话。
: 谁能给个一次遍历的正解。急用。谢谢。

j****9
发帖数: 2295
4
测试用例没太看明白。
其实原题只问了倒数第5个,所以我写个general函数时没考虑n为负数的情况。
iNode() { value = 0; next = NULL; }
iNode(int v) : value(v) { next = NULL; }
iNode(int v, iNode* nx) : value(v), next(nx) {}
这三行必要么?
j****9
发帖数: 2295
5
我是用文字表达test cases的。
Empty Linked list {}, expected output null
Linked list of one element {1}, expected output null
Linked list of five elements {1, 2, 3, 4, 5}, expected output 1
Linked list of more than five elements {1, 2, 3, 4, 5, 6}, expected output 2
需要写成程序? 能帮写一个么?
s***e
发帖数: 122
6
如果是应聘测试的话,那就要更加细心一点了,比如还要排除head == NULL的情况。
那三行是为了写代码简单一点。否则你new了一个iNode,你还要设置value和next。前提
是你是在写C++代码,如果是C代码那就只好麻烦一点了。

【在 j****9 的大作中提到】
: 测试用例没太看明白。
: 其实原题只问了倒数第5个,所以我写个general函数时没考虑n为负数的情况。
: iNode() { value = 0; next = NULL; }
: iNode(int v) : value(v) { next = NULL; }
: iNode(int v, iNode* nx) : value(v), next(nx) {}
: 这三行必要么?

s***e
发帖数: 122
7
。。。希望你不是应聘开发的职位,呵呵
// 从数组构建链表的函数
iNode * buildLinkList(int a[], int n) {
if (a == NULL || n <= 0) return NULL;
iNode* head = new iNode(a[0]);
iNode* tail = head;
for (int i = 1; i < n; ++i) {
tail->next = new iNode(a[i]);
tail = tail->next;
}
return head;
}
// 释放链表内存的函数
void destroyLinkList(iNode* head) {
while (head != NULL) {
iNode* tmp = head->next;
delete head;
head = tmp;
}
}
// 打印链表
void printLinkList(iNode* head) {
if

【在 j****9 的大作中提到】
: 我是用文字表达test cases的。
: Empty Linked list {}, expected output null
: Linked list of one element {1}, expected output null
: Linked list of five elements {1, 2, 3, 4, 5}, expected output 1
: Linked list of more than five elements {1, 2, 3, 4, 5, 6}, expected output 2
: 需要写成程序? 能帮写一个么?

c******a
发帖数: 18
8
递归?或者用stack?

代码。

【在 j****9 的大作中提到】
: 一次遍历找到单链表倒数第m个元素。
: 一道老题。
: 网上有code。看起来没什么问题。但也有人说这个不是一次遍历。求一次遍历的正解代码。
: 只是对于test case 怎么写不太清楚。
: struct iNode {
: int value;
: iNode * next;
: };
: iNode * getresult(iNode * head,int n)
: {

1 (共1页)
进入Programming版参与讨论
相关主题
好久没用C++了,想用静态变量写一个简单双向链表,一直报错
怎样除去循环链
java 链表里面dummy node 一问?谢谢
Reversing a singly linked list
求助:script for commands (转载)
"git reset --soft"具体是干什么用处的?
linux 文件大小的问题
file modification questions in linux using c
Taobao TFS 架构及开源项目
搞大数据那帮人连个quick sort都写不出来
相关话题的讨论汇总
话题: inode话题: pfirst话题: null话题: head话题: next