【数据结构】单链表介绍及leetcode206题反转单链表python实现
2018-12-10 18:59
411 查看
版权声明: https://blog.csdn.net/weixin_41059350/article/details/84944441
单链表(slist) leetcode206题反转单链表
题目传送门:https://leetcode-cn.com/problems/reverse-linked-list/
文章目录
单链表介绍
链表
概念
链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址。由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就能够访问整个结点序列。也就是说,结点包含两部分信息:一部分用于存储数据元素的值,称为信息域;另一部分用于存储下一个数据元素地址的指针,称为指针域。链表中的第一个结点的地址存储在一个单独的结点中,称为头结点或首结点。链表中的最后一个结点没有后继元素,其指针域为空。
结点的结构图下图所示:
种类
主要有单向链表、双向链表、循环链表、多向表(网状表),今天主要介绍单向链表。
优缺点
这里的优缺点主要是和链表对应的另一个数据结构:数组相比得出的。
优点:
- 物理存储单元上非连续,而且采用动态内存分配,能够有效的分配和利用内存资源;
- 节点删除和插入简单,不需要内存空间的重组。
缺点:
- 不能进行索引访问,只能从头结点开始顺序查找;
- 数据结构较为复杂,需要大量的指针操作,容易出错。
单链表(slist)
链表中最简单的一种是单向链表,单向链表就是每个元素包含两个域,值域和指针域,我们把这样的元素称之为节点。每个节点的指针域内有一个指针,指向下一个节点,而最后一个节点则指向一个空值。如下图就是一个单向链表。
leetcode206题反转单链表
题目描述
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
python实现
思路
前面我们已经对链表及单链表有了了解,其中很基础的一个概念就是结点,首先我们先来定义一个结点类
class ListNode: def __init__(self, x): self.val = x self.next = None
然后我们就可以基于这个结点类去实现一个简单的单向链表并把他打印出来了
#定义单向链表 def create_ll(arr): pre = ListNode(0) tmp = pre for i in arr: tmp.next = ListNode(i) tmp = tmp.next return pre.next #打印单向链表 def print_ll(head): tmp = head while tmp: print(tmp.val) tmp=tmp.next
对于单向链表的反转我们考虑用循环来做,以单链表的第一个元素为循环变量cur,并设置2个辅助变量:tmp,保存数据;newhead,的翻转链表的表头。
def reverseList(self, head): """ :type head: ListNode :rtype: ListNode """ if head == None or head.next == None: #边界条件 return head cur = head #循环变量 tmp = None #保存数据的临时变量 newhead = None #新的翻转单链表的表头 while cur: tmp = cur.next cur.next = newhead newhead = cur # 更新 新链表的表头 cur = tmp return newhead
完整代码
class ListNode: def __init__(self, x): self.val = x self.next = None class Solution: def reverseList(self, head): """ :type head: ListNode :rtype: ListNode """ if head == None or head.next == None: #边界条件 return head cur = head #循环变量 tmp = None #保存数据的临时变量 newhead = None #新的翻转单链表的表头 while cur: tmp = cur.next cur.next = newhead newhead = cur # 更新 新链表的表头 cur = tmp return newheaddef create_ll(arr): pre = ListNode(0) tmp = pre for i in arr: tmp.next = ListNode(i) tmp = tmp.next return pre.next def print_ll(head): tmp = head while tmp: print(tmp.val) tmp=tmp.next
相关文章推荐
- 编程集训第2天:LeetCode--环形链表2(142)及单链表反转(206)C++和python代码实现
- 基础数据结构:顺序表、链表——Python实现
- python 数据结构之单链表的实现
- 【LeetCode-面试算法经典-Java实现】【206-Reverse Linked List(反转一个单链表)】
- 数据结构 单链表 python实现
- python——数据结构之单链表的实现
- 数据结构之链表:实现单链表的逆序 (1)
- Leetcode[142][206] python实现 链表
- 单链表之python实现学习笔记及环形链表-反转链表
- 【LeetCode】Python实现-206. 反转链表(三种方法)
- python——python 数据结构之双向链表的实现
- python 数据结构之单链表的实现
- Python数据结构之单链表实现
- 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现
- 数据结构之单链表及python实现
- 数据结构--利用Python实现常用的链表结构
- Python-数据结构之单链表的实现
- Hrbust-1546-基础数据结构——单链表(1)【链表实现】
- 数据结构之链表:实现单链表的k逆序(2)
- python 数据结构之双向链表的实现