您的位置:首页 > 其它

九度 链表中倒数第k个结点

2013-10-07 18:18 134 查看
/*
* a.cpp
*
*  Created on: 2013-10-7
*      Author: wangzhu
*/

#include<cstdio>
#include<iostream>
using namespace std;
struct Node {
int key;
Node* next;
};

void addToHead(Node* root, int val) {
Node* tempNode = root->next;

Node* node = new Node;
node->key = val;
node->next = tempNode;

root->next = node;
}

void addToTail(Node* root, int val) {
Node* node = new Node;
node->key = val;
node->next = NULL;
if (root->next == NULL) {
root->next = node;
} else {
Node* tempNode = root->next;
while (tempNode->next != NULL) {
tempNode = tempNode->next;
}
tempNode->next = node;
}
}

void printHead(Node* node, int k) {
for (int i = 1; i < k; i++) {
node = node->next;
}
printf("%d\n", node->key);
}

void printTail(Node* node, int k) {
Node* firstNode = node;
Node* secondNode = node;
for (int i = 1; i < k; i++) {
firstNode = firstNode->next;
}
while (firstNode->next != NULL) {
firstNode = firstNode->next;
secondNode = secondNode->next;
}
printf("%d\n", secondNode->key);
}
int main() {
freopen("data.in", "r", stdin);
Node* root;
int n, k, val;
while (~scanf("%d%d", &n, &k)) {
root = new Node;
root->next = NULL;
for (int i = 0; i < n; i++) {
scanf("%d", &val);
//addToHead(root, val);
addToTail(root,val);
}
if (n == 0 || k == 0 || n < k) {
printf("NULL\n");
} else {
//printHead(root->next, k);
printTail(root->next,k);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: