Python实现链表倒序(带头指针)

class node:
    def __init__(self, value):
        self.value = value
        self.next = None

def reverse(head):
    if head is None or head.next is None or head.next.next is None:
        return head

    if head.next.next.next is None:
        t = head.next.next
        t.next = head.next
        head.next.next = None
        head.next = t
        return head

    pre = head.next
    cur = pre.next
    pre.next = None
    next = cur.next
    while next.next is not None:
        cur.next = pre
        pre = cur
        cur = next
        next = next.next
    head.next = next
    next.next = cur
    cur.next = pre
    return head

def out(head):
    if head is not None:
        while head.next is not None:
            print(head.value)
            head = head.next
        print(head.value)
    else:
        print(None)

if __name__ == "__main__":
    head = node(None)
    pre = head
    for i in range(6):
        pre.next = node(i)
        pre = pre.next
    out(head)
    head = reverse(head)
    out(head)

原文地址:https://www.cnblogs.com/weswes/p/10084178.html

时间: 12-07

Python实现链表倒序(带头指针)的相关文章

python单链表实例分享

有关python单链表的实现代码. 链表的定义:链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就能够访问整个结点序列.也就是说,结点包含两部分信息:一部分用于存储数据元素的值,称为信息域:另一部分用于存储下一个数据元素地址的指针,称为指针域.链表中的第一个结点的地址存储在一个单独的结点中,称为头结点或首结点.链表中的最后一个结点没有后继元素,其指针域为空. p

20140428 宏定义 单链表翻转 野指针

1.宏定义swap,加括号有什么意义 #define swap(x,y) x = (x)+(y):y=(x)-(y):x=(x)-(y) 加括号是为了处理表达式参数(即宏的参数可能是个算法表达式)时不出错,因为宏替换就是文本替换,所以如果有以下情况: #define COM(A,B) (A)*(B) 那么COM(6+5,3),它会换成这样: (6+5)*(3) 但是如是去掉了定义中括号,即写成这样: #define COM(A,B) A*B 那么COM(6+5,3),它就会换成这样:6+5*3

给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点

#include <iostream> #include <string.h> #include <stdlib.h> #include <stack> using namespace std; struct Node { int data; struct Node* next; }; struct Node* create_list(int len) { if (len <= 0) return NULL; struct Node* head; st

python数据结构链表之单向链表

本文和大家分享的主要是python中单向链表相关内容,一起来看看吧,希望对大家学习python有所帮助. 单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. . 表元素域elem用来存放具体的数据. . 链接域next用来存放下一个节点的位置(python中的标识) . 变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点. 节点实现 class 

reorder-list——链表、快慢指针、逆转链表、链表合并

Given a singly linked list L: L0→L1→-→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→- You must do this in-place without altering the nodes' values. For example,Given{1,2,3,4}, reorder it to{1,4,2,3}. 由于链表尾端不干净,导致fast->next!=NULL&&fast->next-&

链表中头指针和头结点

线性表使用顺序(数组)存储时有个弊端,那就是在插入和删除时需要大量的移动数据,这显示是非常消耗时间的,所以可以采用链式存储,即有一个指针域(单链表),来记录下个结点的存储位置(地址),这样在插入和删除结点时只需要修改指针域即可,从而大量减少移动数据所消耗的时间.来看链表的定义: struct node { int data; struct node *next; }; 其中有两个元素,data为数据域,用于存储数据,next为指针域,用于存储下个结点的位置(地址).那么什么是头指针呢?我们把指向

PAT 链表倒序的算法优化

之前的答案错误问题已经解决了,现在还有运行超时的问题,先贴上之前的代码 1 #include <iostream> 2 #include <string.h> 3 using namespace std; 4 5 int main() 6 { 7 int count, renum; 8 string add; 9 cin>>add>>count>>renum; 10 string add1[count],add2[count],madd1[cou

单链表二[不带头节点链表]

不带头节点链表 单向链表是链表的一种.单向链表由一系列内存不连续的节点组成,每个节点都包含指向值的域和指向下个节点的next指针.最后一个节点的next域为NULL值,代表链表结束. 链表示意图如下: 一,结构体 1,结构体定义: struct LinkNode {     void *x;      struct LinkNode *next; }; 2,结构体大小: 1)取结构体大小方法:sizeof(struct LinkNode);在64位系统取出结构体大小为:sizeof(struct

对带头结点的单链表的简单操作

#pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<memory.h> #define DataType int           //int 可以改写为其它数据类型 typedef struct Node { DataType data; struct Node *next; }Node,*pNode;          //定义结点结构体      

LeetCode138 Copy List with Random Pointer(深度复制带有随机指针的链表) Java题解

题目: A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null. Return a deep copy of the list. 解题: 这题是要复制一个链表,这个链表比普通的链表多一个指针,这个指针可以指向任意地方,可以为空也可以为链表中的任一个节点,今天中午的时候我同学和我说起这题,当时问