策略

直接遍历总数为len,再次遍历第len-k+1个就是答案,但是这样遍历了O(N+k)个,可以在O在更短的时间内找到

图示

参考代码

#include <iostream>
using namespace std; typedef struct ListNode
{
int value;
ListNode* next;
}ListNode; void createList(ListNode *&head)
{
head = new(ListNode);
head->value = ;
head->next = NULL; ListNode *p2 = new(ListNode);
p2->value = ;
p2->next = NULL;
head->next = p2; ListNode *p3 = new(ListNode);
p3->value = ;
p3->next = NULL;
p2->next = p3; ListNode *p4 = new(ListNode);
p4->value = ;
p4->next = NULL;
p3->next = p4;
}
void deleteList(ListNode *p)
{
ListNode *next = NULL;
while(p != NULL)
{
next = p->next;
delete p;
p = NULL;
p = next;
}
} bool deleteKNode_2(ListNode *head, int k)
{
if(head == NULL || k <= )
return false;
ListNode *pre = head;
for(int i = ; i < k - ; ++i)
{
if(pre == NULL)
return false;
pre = pre->next;
}
ListNode *cur = head;
while(pre->next)
{
pre = pre->next;
cur = cur->next;
}
cout << cur->value;
cout << "succeed:" << endl;
return true;
}
int main()
{
ListNode *head = NULL;
createList(head);
int k = ; cout << "Result:" << deleteKNode_2(head, ) << endl;
deleteList(head);
}

结果

三点注意

1. 指针为空

2. k<=0

3. k<len

删除单链表的倒数第k个结点的更多相关文章

  1. 查找单链表中倒数第k个结点

    本文转自:程序员面试题6--查找链表中倒数第k个结点 题目:输入一个单向链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针.链表结点定义如下: struct ListNode { i ...

  2. 单链表输出倒数第k个结点值(栈实现)

    思路1:定义两个指针变量p和q,初始时均指向头节点的下一个节点(链表的第一个节点),p指针沿链表移动: 当p指针移动到第k个节点时,q指针开始与p指针同步移动, 当p指针移动到最后一个节点时,q指针所 ...

  3. 判断闰年的方法以及如何获得单链表的倒数第K个元素

    今天很悲催,心中向往的公司,打电话过来面试,问到我两个问题,结果竟然都没有回答上,伤心了,记录下今天失败,希望以后不要被同样的问题给PASS. 问题1.如何判断是否为闰年 所谓闰年那就是:四年一闰,百 ...

  4. 查找单链表的倒数第k个值

    刚开始,我想到的是一种笨方法,先遍历单链表,计算出单链表的长度len,然后再从头遍历单链表到第len-k个节点,那么 这个节点既是单链表的倒数第k个节点. 不过这种算法时间复杂度挺高的,还有一种更简单 ...

  5. 20140719 找到单链表的倒数第K个节点 判断一个链表是否成为一个环形 反转

    1.找到单链表的倒数第K个节点 2.判断一个单链表对否形成环形 3.单链表翻转

  6. 输入一个单向链表,输出该链表中倒数第K个结点

    输入一个单向链表,输出该链表中倒数第K个结点,具体实现如下: #include <iostream> using namespace std; struct LinkNode { publ ...

  7. 面试题15:链表中倒数第K个结点

    输入一个链表,输出该链表中倒数第k个结点. 方法1: 这个解法要循环两次链表 /* public class ListNode { int val; ListNode next = null; Lis ...

  8. 面试题 15:链表中倒数第 k 个结点

    面试题 15:链表中倒数第 k 个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯, 本题从 1 开始计数,即链表的尾结点是倒数第一个结点.例如一个有 6 个结点的 链 ...

  9. 【剑指Offer面试题】 九度OJ1517:链表中倒数第k个结点

    鲁棒性是指程序可以推断输入是否符合规范要求,并对不和要求的输入予以 合理的处理. 题目链接地址: http://ac.jobdu.com/problem.php?pid=1517 题目1517:链表中 ...

随机推荐

  1. 自改xss小平台上线

    原先一直用xss.hk结果不知怎么被关的,正好手上有代码于是自己搭了一个,网上的类似的xss平台大多一样,原先的xss的chrome插件,不适合 "manifest_version" ...

  2. c++中new分配动态数组

    变长一维数组     这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组.实现变长数组最简单的是变长一维数组,你可以这样做:  //文件名: array01.cpp ...

  3. 微软职位内部推荐-Senior Android Developer

    微软近期Open的职位: Position: Senior SDE-- Mobile Products Android/iOS/WP Senior Developer Contact Person: ...

  4. Bluetooth

    Android provides a default Bluetooth stack, BlueDroid, that is divided into two layers: The Bluetoot ...

  5. Android开发应用异步检查更新代码

    开发环境:android studio    sdk 4.0及以上 场景:用户点击检查更新按钮进行检查服务器版本号,若有新版本则进行下载更新.异步检测版本号 package com.example.q ...

  6. Jenkins入门-转

    reference : http://www.cnblogs.com/itech/archive/2011/11/23/2260009.html 在网上貌似没有找到Jenkins的中文的太多的文档,有 ...

  7. Codeforces Round #222 (Div. 1) C. Captains Mode 对弈+dp

    题目链接: http://codeforces.com/contest/378/problem/E 题意: dota选英雄,现在有n个英雄,m个回合,两支队伍: 每一回合两个选择: b 1,队伍一ba ...

  8. JavaScript高级---门面模式设计

    门面模式 两个作用: 1.简化类的接口 2.消除类与使用它的客户代码之间的耦合 门面模式常常是开发人员最亲密的朋友.它几乎是所有javascript库的核心原则 门面模式的目的是为了让开发人员用更简单 ...

  9. LA 4329

    第一次敲树状数组  因为一个小错误 wa了 n 多遍  终于ac  太不容易了 /*********************************************************** ...

  10. POJ 2155 Matrix (二维线段树入门,成段更新,单点查询 / 二维树状数组,区间更新,单点查询)

    题意: 有一个n*n的矩阵,初始化全部为0.有2中操作: 1.给一个子矩阵,将这个子矩阵里面所有的0变成1,1变成0:2.询问某点的值 方法一:二维线段树 参考链接: http://blog.csdn ...