博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链表指定值清除、链表的回文结构
阅读量:6048 次
发布时间:2019-06-20

本文共 2224 字,大约阅读时间需要 7 分钟。

链表指定值清除

现在有一个单链表。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉。
给定一个单链表的头结点head,同时给定一个值val,请返回清除后的链表的头结点,保证链表中有不等于该值的其它值。请保证其他元素的相对顺序。

测试样例:

{1,2,3,4,3,2,1},2

{1,3,4,3,1}
我的提交

-- coding:utf-8 --

class ListNode:

def init(self, x):

self.val = x

self.next = None

class ClearValue:

def clear(self, head, val):

write code here

if not head:        return None    while head and head.val == val:        head = head.next    p = head    h = None    while p:        if p.val == val:            h.next = p.next        else:            h = p        p = p.next    #h.next = None    return head

链表的回文结构

请编写一个函数,检查链表是否为回文。
给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。
#测试样例:
{1,2,3,2,1}
#返回:true
{1,2,3,2,3}
#返回:false
我的提交

-- coding:utf-8 --

class ListNode:

def init(self, x):

self.val = x

self.next = None

class Palindrome:

def isPalindrome(self, pHead):

write code here

stack = []    p = pHead    while p:        temp = p        stack.append(temp)        p = p.next    p = pHead    for _ in range((len(stack) // 2) + 1):        temp = stack.pop()        if p.val != temp.val:            return False        p = p.next    return True

参考答案

import java.util.*;

/*

public class ListNode {
int val;
ListNode next = null;

ListNode(int val) {    this.val = val;}

}*/

public class Palindrome {
public boolean isPalindrome(ListNode head) {
if (head == null || head.next == null) {
return true;
}
ListNode n1 = head;
ListNode n2 = head;
while (n2.next != null && n2.next.next != null) { // find mid node
n1 = n1.next; // n1 -> mid
n2 = n2.next.next; // n2 -> end
}
n2 = n1.next; // n2 -> right part first node
n1.next = null; // mid.next -> null
ListNode n3 = null;
while (n2 != null) { // right part convert
n3 = n2.next; // n3 -> save next node
n2.next = n1; // next of right node convert
n1 = n2; // n1 move
n2 = n3; // n2 move
}
n3 = n1; // n3 -> save last node
n2 = head;// n2 -> left first node
boolean res = true;
while (n1 != null && n2 != null) { // check palindrome
if (n1.val != n2.val) {
res = false;
break;
}
n1 = n1.next; // left to mid
n2 = n2.next; // right to mid
}
n1 = n3.next;
n3.next = null;
while (n1 != null) { // recover list
n2 = n1.next;
n1.next = n3;
n3 = n1;
n1 = n2;
}
return res;
}
}

转载于:https://blog.51cto.com/13545923/2054453

你可能感兴趣的文章
这份文件说,英特尔真的要放弃死气沉沉的PC业务了
查看>>
德国公司研发太阳能公路 能源利用率可达15%
查看>>
小区拆墙后看视频安防拐点
查看>>
光伏贷“变身” 逾20家银行授信松绑
查看>>
外贸英文站该如何合理的优化Google排名
查看>>
科大讯飞陶晓东:智能影像技术如何解决临床问题? | CCF-GAIR 2017
查看>>
为实战而生,科达正式发布猎鹰系列智能分析系统
查看>>
2016年存储市场10大趋势
查看>>
雅虎腰斩自家7项业务:计划裁员400多人
查看>>
至少泄露5亿信息 雅虎已暂禁电子邮件自动转发
查看>>
MySQL 5.7下InnoDB对COUNT(*)的优化
查看>>
国内首次公开僵尸网络主控服务器数量
查看>>
数据分析师常见的十个问题
查看>>
微软继续投资人工智能:与马斯克OpenAI达成云计算合作
查看>>
美国大学开始用大数据来预测学生是否能顺利完成课业
查看>>
全球4G排名:新加坡45兆网速第一、信号韩国最好
查看>>
2017年分布式光伏的正确“打开”方式
查看>>
智能时代,深度学习和大数据成了密不可分的一对儿
查看>>
中国存储三大势力成形 各自进击
查看>>
ALE新战略三板斧:行业化,云服务和渠道
查看>>