链表反转python

def reverse_node_list(head):
    if not head or not head.next:
        return head
    prev = None
    while head:
        curr = head
        head = head.next
        curr.next = prev
        prev = curr

    return prev

设置三个指针, prev指向前一个节点, head 指向现在的节点, curr指向下一个要去的节点

初始化:

prev空

head表头

先保留当前节点

挪动指针

当前节点反转

挪动prev

原文地址:https://www.cnblogs.com/theodoric008/p/8550886.html

时间: 2024-10-08 22:47:40

链表反转python的相关文章

单链表反转python实现

单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表 循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur->next指向pre即可. 代码: class ListNode: def __init__(self,x): self.val=x; self.next=None; def nonrecurse(head): #循环的方法反转链表 if head is None or head.next is None: return head; pre=None; c

单链表的反转 python实现实例

单链表反转实现 1.递归实现 根据递归,递归到最后一个节点(条件为head3为非空,其下一个指向为空),将其next指向前一个结点,前一个结点的指向为None. def recurse(head, newhead): # 递归,head为原链表的头结点,newhead为反转后链表的头结点 if head is None: return if head.next is None: newhead = head else: newhead = recurse(head.next, newhead)

链表反转leetcode206

最近准备结束自己的科研生涯,准备要开始找工作了,准备在LEETCODE刷刷题...刷的前40题全部用python刷的,各种调包速度奇快,后被师哥告知这样没意义,于是准备开始回归C++,Python用的多了再用C++总是忘记敲分号和括号,甚至Compile Error了几次 = =.尴尬 链表反转比较简单,首先用自己的"本科"方法做了一下,发现效率并不高: 1 class Solution { 2 public: 3 ListNode* reverseList(ListNode* hea

单链表反转问题

单链表反转问题 基本问题 如何将单链表反转? 算法实现 /** * * Description: 单链表反转. * * @param head * @return ListNode */ public static ListNode reverseList(ListNode head) { if (head == null) { return head; } ListNode prev = null; ListNode current = head; ListNode next = null;

链表反转的递归和非递归实现方式

链表反转是数据结构的基本功,主要有递归和非递归两种实现方式.我们一一介绍如下: 1. 非递归实现 主要包括如下4步: 1)如果head为空,或者只有head这一个节点,return head即可: 2)从头到尾遍历链表,把reversedHead赋值给当前节点的next: 3)当前节点赋值给reversedHead: 4)遍历结束,return reversedHead. 下图试图来辅助说明: 代码如下: node* reverseList(node* head) { if(head == NU

链表反转(递归方式,非递归方式)

//非递归方式进行链表反转 public ListNode reverseList(ListNode head){ if(head==null||head.next==null){ return head; }else { ListNode pre=head; ListNode p=head.next; ListNode next=null; while (p!=null) { next=p.next; p.next=pre; pre=p; p=next; } head.next=null; r

单链表反转的2种方法

1 public class ReverseDemo { 2 3 /** 4 * 单链表反转的两种方法 5 */ 6 public static void main(String[] args) { 7 Node head =new Node("a"); 8 Node node2=new Node("b"); 9 Node node3=new Node("c"); 10 head.setNext(node2); 11 node2.setNext(

链表 单链表反转

思路1:O(n^2). “狸猫换太子”,不进行改动链表结构,只首尾交换len/2次.但是在本函数中用到了定位函数,定位函数实际上是遍历了一遍整个链表,所以综合效率很低,达到O(n^2). //单链表反转(O(n^2)) void reverseList(Node* Head) { int count = numOfNodes(Head); //首尾交换 for(int i=1; i<=count/2; i++) { Node* p1 = locateNodeI(Head, i); Node* p

C++将链表反转的实现

有题目的需求是求将链表反转,例如1->2->3->4->5转变成5->4->3->2->1,经典的是可以有两种解决方法,递归方式和非递归方式,下面给出C++的这两周实现过程. #include<iostream> using namespace std; const int N = 6; typedef int DataType;//定义数据类型 typedef struct node{//创建链表node DataType data; stru