链表回文串判断&&链式A+B
有段时间没有练习了,链表回文串判断用到了栈。链式A+B将没有的项用0补充。链表有没有头节点,及结点和链表的区别,即pNode和pHead。
//#include<iostream>
//using namespace std;
//
//class Base {
//public:
// Base(int j) : i(j) {}
// virtual~Base() {}
// void func1() {
// i *= 10;
// func2();
// }
// int getValue() {
// return i;
// }
//protected:
// virtual void func2() {
// i++;
// }
//protected:
// int i;
//};
//
//class Child : public Base {
//public:
// Child(int j) : Base(j) {}
// void func1() {
// i *= 100;
// func2();
// }
//protected:
// void func2() {
// i += 2;
// }
//};
//int main() {
// Base * pb = new Child(1);
// pb->func1();
// cout << pb->getValue() << endl; ///12
// delete pb;
//}
题目分析:
《方法1》:反转链表
可以将原始链表反转,判断反转以后的链表与原始链表是否完全一致,如果一致便返回true,如果不一致则返回false。反转链表需要额外的存储空间,不是特别优秀的方法。
《方法2》:栈实现
我们可以想到从中间节点向两侧开始比较,如果全部相同,则返回true,否则返回false,因为无法获得一个节点的前一个节点,这个时候我们可以想到用栈实现,先将链表前半部分的元素分别压入堆栈,然后在遍历后半部分元素的时候同时和栈顶元素进行比较,如果全部相等则返回true,否则返回false。
特别注意:因为我们不知道链表的的长度,可以通过快慢指针(一个指针每次移动两个,一个指针每次移动一个)来找到中间元素,这样整体只需要遍历链表一次,所需要的栈空间缩小为方法1的一半。
《方法3》:递归法
/*****************************************************
* \file Palindrome listNode.cpp
* \date 2016/05/05 17:16
题目描述
请编写一个函数,检查链表是否为回文。
给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。
测试样例:
{1,2,3,2,1}
返回:true
{1,2,3,2,3}
返回:false
*****************************************************/
struct ListNode
{
int val;
struct ListNode *next;
ListNode(int x) :val(x), next(nullptr){}
};
#include <iostream>
#include <stack>
using namespace std;
class Palindrome {
public:
bool isPalindrome(ListNode* pHead) {
// write code here
ListNode *pNode = pHead;
stack<int> s;
while (pNode)
{
s.push(pNode->val);
pNode = pNode->next;
}
pNode = pHead;
while (pNode)
{
if (pNode->val==s.top())
{
pNode=pNode->next;
s.pop();
}
else
{
return false;
}
}
return true;
}
};
这个哥们总结的不错:
题目描述
有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。
{1,2,3},{3,2,1}
返回:{4,4,4}
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class Plus {
public:
ListNode* plusAB(ListNode* a, ListNode* b) {
;
ListNode *retHead = );
ListNode *p = retHead;
while (a || b || carry) {
;
;
;
carry = (vala + valb + carry) / ; //进位
ListNode *tmp = new ListNode(val);
p->next = tmp;
p = p->next;
a = a ? a->next : nullptr;
b = b ? b->next : nullptr;
}
p->next = nullptr;
return retHead->next;
}
};
链表回文串判断&&链式A+B的更多相关文章
- 链表回文串判断&&链式A+B
有段时间没有练习了,链表回文串判断用到了栈.链式A+B将没有的项用0补充.链表有没有头节点,及结点和链表的区别,即pNode和pHead. //#include<iostream> //u ...
- Openjudge-计算概论(A)-回文串判断
描述: 任意给定一个非空的字符串,判断其是否是回文串.回文串是指正向看和反向看均相等的串,如AbcDcbA和cDDc.如果是回文串,则输出1,否则,输出0 输入长度不小于1不大于100的字符串输出如果 ...
- 《LeetBook》leetcode题解(5):Longest Palindromic [M]——回文串判断
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- openjudge-回文串判断【递归】
回文串判断 总时间限制: 1000ms 内存限制: 65536kB 描述 任意给定一个非空的字符串,判断其是否是回文串.回文串是指正向看和反向看均相等的串,如AbcDcbA和cDDc.如果是回文串,则 ...
- 分割回文串 · Palindrome Partitioning
[抄题]: 给定一个字符串s,将s分割成一些子串,使每个子串都是回文串. 返回s所有可能的回文串分割方案. 给出 s = "aab",返回 [ ["aa", & ...
- lintcode-415-有效回文串
415-有效回文串 给定一个字符串,判断其是否为一个回文串.只包含字母和数字,忽略大小写. 注意事项 你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题. 在这个题目中,我们将 ...
- HDOJ/HDU 2163 Palindromes(判断回文串~)
Problem Description Write a program to determine whether a word is a palindrome. A palindrome is a s ...
- HDU_2029——回文串的判断
Problem Description “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串.请写一个程序判断读入的字符串是否是“回文”. Input 输入包 ...
- leetcode:Palindrome Number (判断数字是否回文串) 【面试算法题】
题目: Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could neg ...
随机推荐
- iOS开发网络篇-NSURLSession介绍
NSURLSession: 作用: 和NSURLConnection一样 1.负责发送请求,建立客户端和服务器的连接发送数据给服务器 2.并收集来自服务器的响应数据 步骤: 1.创建NSURLSess ...
- Go语言博客
http://www.cnblogs.com/concurrency/p/4293613.html#3130523
- 是什么让 Ubuntu 选用 Qt 而不是 GTK?
是什么让 Ubuntu 选用 Qt 而不是 GTK? 一个正在发生的事实,Ubuntu正在不断Qt化!我曾一直在抱怨的Software Center,今日一看源码,竟然有softwarecenter/ ...
- PCL—低层次视觉—点云分割(基于形态学)
1.航空测量与点云的形态学 航空测量是对地形地貌进行测量的一种高效手段.生成地形三维形貌一直是地球学,测量学的研究重点.但对于城市,森林,等独特地形来说,航空测量会受到影响.因为土地表面的树,地面上的 ...
- OpenCV码源笔记——RandomTrees (二)(Forest)
源码细节: ● 训练函数 bool CvRTrees::train( const CvMat* _train_data, int _tflag, cons ...
- 经典K线组合图解 > 正文
日K线波段中上下影线的箱体操作法(完整) http://video.sina.com.cn/v/b/130809461-2486130757.html!!经典K线组合图解 > 正文 http:/ ...
- Android开发之定义接口暴露数据
写了一个网络请求的工具类,然后想要获取到网络请求的结果,在网络工具类中写了一个接口,暴露除了请求到的数据 代码: package com.lijingbo.knowweather.utils; imp ...
- poj 2886 Who Gets the Most Candies?(线段树和反素数)
题目:http://poj.org/problem?id=2886 题意:N个孩子顺时针坐成一个圆圈且从1到N编号,每个孩子手中有一张标有非零整数的卡片. 第K个孩子先出圈,如果他手中卡片上的数字A大 ...
- Qt之进程间通信(IPC)
简述 进程间通信,就是在不同进程之间传播或交换信息.那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区.但是,系统空间却是& ...
- 从客户端中检测到有潜在危险的 Request.Form 值-解决方案
环境:VS2010 1.页头上加上ValidateRequest="false" <%@ Page Language="C#" ValidateReque ...