继续关于linked list的算法题:

删除排序链表中的重复元素

给定一个排序链表,删除所有重复的元素使得每个元素只留下一个。

案例:

给定 1->1->2,返回 1->2

给定 1->1->2->3->3,返回 1->2->3

解题思路:

这道题很简单,只需要比较当前节点和下一个节点,相同,则当前节点的指针指向下一节点的下一节点,不相同,递归下一节点。还是要注意同样的问题,单向链表是只能向后不能向前的,所以,要保留首节点。

# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None class Solution(object):
def deleteDuplicates(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head:
return None
pre = head
while pre.next:
if pre.val == pre.next.val:
pre.next = pre.next.next
else:
pre = pre.next
return head

我们继续来看另外一道题目

交换相邻结点

给定一个链表,对每两个相邻的结点作交换并返回头节点。

例如:
给定 1->2->3->4,你应该返回 2->1->4->3

你的算法应该只使用额外的常数空间。不要修改列表中的值,只有节点本身可以​​更改。

解题思路:

这里思路很明确,每次循环两个变量,在循环中维护两个变量,temp1和temp2,分别代表每当前次循环的第一个节点和第二个节点,交换他们的位置,并把原来的pre指针指向调整位置后的第一个节点,第二个节点的指针指向后续指针。dump代表新列表的头元素,pre代表每次循环的前置指针元素。代码如下:

# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
dump = pre = ListNode(-1)
if not (head and head.next):
return head
while head and head.next:
temp1 = head
temp2 = head.next
temp1.next = temp2.next
temp2.next = temp1
pre.next = temp2
pre = temp1
head = temp1.next return dump.next

递归的实现代码如下:

# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
""" if not (head and head.next):
return head
new_head = head.next
head.next = self.swapPairs(head.next.next)
new_head.next=head
return new_head

  coding交流群:226704167,郑州程序员群:59236263愿和各位一起进步!

微信公众号:欢迎关注

数据结构与算法 —— 链表linked list(03)的更多相关文章

  1. 数据结构与算法 —— 链表linked list(01)

    链表(维基百科) 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).由于不必须按顺序存储, ...

  2. 数据结构与算法 —— 链表linked list(06)

    回文链表 链接 请检查一个链表是否为回文链表. 进阶:你能在 O(n) 的时间和 O(1) 的额外空间中做到吗? 解题思路: 回文链表的特点就是对称. 把链表放到栈中去,利用栈的先进后出的规则,和原链 ...

  3. 数据结构与算法——链表 Linked List(单链表、双向链表、单向环形链表-Josephu 问题)

    链表是有序的列表,但是在内存中存储图下图所示 链表是以 节点 的方式来存储,是 链式存储 每个节点包含 data 域.next 域,指向下一个节点 链表的各个节点 不一定是连续存储,如上图所示 链表还 ...

  4. 数据结构与算法 —— 链表linked list(02)

    我们继续来看链表的第二道题,来自于leetcode: 两数相加 给定两个非空链表来代表两个非负整数,位数按照逆序方式存储,它们的每个节点只存储单个数字.将这两数相加会返回一个新的链表. 你可以假设除了 ...

  5. 数据结构与算法 —— 链表linked list(04)

    我们在上篇文章里面提到了链表的翻转,给定一个链表,对每两个相邻的节点作交换,并返回头节点,今天的这道题是它的升级版,如下: k个一组翻转链表 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链 ...

  6. 数据结构与算法 —— 链表linked list(05)

    反转一个单链表. 进阶:链表可以迭代或递归地反转.你能否两个都实现一遍? 示例 : 给定这个链表:1->2->3->4->5 返回结果: 5->4->3->2 ...

  7. JavaScript数据结构与算法-链表练习

    链表的实现 一. 单向链表 // Node类 function Node (element) { this.element = element; this.next = null; } // Link ...

  8. 《数据结构与算法之美》 <03>数组:为什么很多编程语言中数组都从0开始编号?

    提到数组,我想你肯定不陌生,甚至还会自信地说,它很简单啊. 是的,在每一种编程语言中,基本都会有数组这种数据类型.不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构.尽管数组看起来非常 ...

  9. python数据结构与算法——链表

    具体的数据结构可以参考下面的这两篇博客: python 数据结构之单链表的实现: http://www.cnblogs.com/yupeng/p/3413763.html python 数据结构之双向 ...

随机推荐

  1. Online Judge(OJ)搭建——5、配置

    Spring 配置一些本地类,还有 HTML form 提交文件的解析器. package per.piers.onlineJudge.config; import org.springframewo ...

  2. Axis1.4之即时发布服务

    下载axis1.4开发包,解压开发包,将webapps目录下的axis文件夹拷贝到tomcat的webapps目录下.启动tomcat,在浏览器输入http://localhost:8080/axis ...

  3. Redis登录密码设置

    1. 更改Redis.conf配置 # requirepass foobared 去掉注释,foobared改为 自己的password , 我测试的时候用的是默认的 foobared 2.启动red ...

  4. 【Python】 垃圾回收机制和gc模块

    垃圾回收机制和gc模块 Py的一个大好处,就是灵活的变量声明和动态变量类型.虽然这使得学习py起来非常方便快捷,但是同时也带来了py在性能上的一些不足.其中相关内存比较主要的一点就是py不会对已经销毁 ...

  5. shell脚本里获取字符串的最后一个字符

    STR=123456abc FINAL=`echo ${STR: -1}` 或者 FINAL=${STR: -1} 都可以让FINAL获得c这个最后一个字符  

  6. Java ORM Hibernate 入门笔记

    一.下载 官网地址:http://hibernate.org/ Hibernate下有ORM(关系型数据库).OGM(NoSQL数据库).Search(对象全文检索).Validator的工具. OR ...

  7. 【最全】经典排序算法(C语言)

    算法复杂度比较: 算法分类 一.直接插入排序 一个插入排序是另一种简单排序,它的思路是:每次从未排好的序列中选出第一个元素插入到已排好的序列中. 它的算法步骤可以大致归纳如下: 从未排好的序列中拿出首 ...

  8. Konckout第五个实例:各种事件绑定

    点击加一: <!doctype html> <html > <head> <meta http-equiv="Content-Type" ...

  9. WebAPI问题追踪日志记录过滤器

    公司项目比较坑爹,毕竟涉及到前后端分离.多部门协作,很多时候系统出问题,哪怕已经很清楚了,协作方依然要我们把API调用入参.响应等记录下来,而且是全记录,不光是异常调用,待调查结束后这些日志又需要卸下 ...

  10. freemarker 类型转换

    操作字符串函数  1. substring(start,end)从一个字符串中截取子串  start:截取子串开始的索引,start必须大于等于0,小于等于endend: 截取子串的长度,end必须大 ...