博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 92 Reverse Linked List II
阅读量:4171 次
发布时间:2019-05-26

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

 leetcode 92   Reverse Linked List II

题目描述:

Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,
return 1->4->3->2->5->NULL.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

Python代码(将q,p,end,pPre,pNext等变量定义成 函数内的局部变量):

# Definition for singly-linked list.# class ListNode(object):#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution(object):    def reverseBetween(self, head, m, n):        """        :type head: ListNode        :type m: int        :type n: int        :rtype: ListNode        """        if m==n:            return head        q=None # q用来指向第m个节点的前驱,初始值设为None        p=head # p用来指向当前节点,初始指向头节点        # 通过下面的for循环,将p指向第m个节点,q指向其前驱        for i in range(1,m):            q=p            p=p.next                end=p    #在将p后移之前,执行此语句,记录第m个节点的地址        pPre=p   #在将p后移之前,执行此语句,pPre用来指向p的前驱,初始时,pPre指向第m个节点。        p=p.next #将p后移一步,使p指向第m+1个节点        pNext=None #pNext用来指向节点p的后驱,具体的赋值操作在下面的for循环内进行。        # 通过下面的for循环,翻转链表指定部分        for i in range(m+1,n+1):            pNext=p.next            p.next=pPre            pPre=p            p=pNext                end.next=p        if q==None:            head=pPre        else:            q.next=pPre        return head

Python代码(将q,p,end,pPre,pNext等变量定义成 类的实例的数据成员):

# Definition for singly-linked list.# class ListNode(object):#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution(object):    def reverseBetween(self, head, m, n):        """        :type head: ListNode        :type m: int        :type n: int        :rtype: ListNode        """        if m==n:            return head        self.q=None # q用来指向第m个节点的前驱,初始值设为None        self.p=head # p用来指向当前节点,初始指向头节点        # 通过下面的for循环,将p指向第m个节点,q指向其前驱        for i in range(1,m):            self.q=self.p            self.p=self.p.next                self.end=self.p    #在将p后移之前,执行此语句,记录第m个节点的地址        self.pPre=self.p   #在将p后移之前,执行此语句,pPre用来指向p的前驱,初始时,pPre指向第m个节点。        self.p=self.p.next #将p后移一步,使p指向第m+1个节点        self.pNext=None #pNext用来指向节点p的后驱,具体的赋值操作在下面的for循环内进行。        # 通过下面的for循环,翻转链表指定部分        for i in range(m+1,n+1):            self.pNext=self.p.next            self.p.next=self.pPre            self.pPre=self.p            self.p=self.pNext                self.end.next=self.p        if self.q==None:            head=self.pPre        else:            self.q.next=self.pPre        return head

C++代码:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* reverseBetween(ListNode* head, int m, int n) {        if(m==n)return head;        ListNode *q=NULL; //指针变量q用来指向第m个节点的前驱,初始值设为NULL        ListNode *p=head; //指针变量p用来指向当前节点,初始指向头节点        //通过下面的for循环,将p指向第m个节点,q指向其前驱        for(int i=1;i
next; } ListNode *end=p; //在将指针p后移之前,执行此语句,记录第m个节点的地址 ListNode *pPre=p;//在将指针p后移之前,执行此语句,使pPre指向p的前驱,初始时,pPre指向第m个节点。 p=p->next; //将指针p后移一步,使p指向第m+1个节点 ListNode *pNext=NULL;//指针变量pNext用来指向节点p的后驱,具体的赋值操作在下面的for循环内进行。 //通过下面的for循环,翻转链表指定部分 for(int i=m+1;i<=n;i++) { pNext=p->next; p->next=pPre; pPre=p; p=pNext; } end->next=p; if(q!=NULL)q->next=pPre; else head=pPre; return head; }};

转载地址:http://edyai.baihongyu.com/

你可能感兴趣的文章
2019.2.28
查看>>
2019.2.29
查看>>
聊聊我当年在培训学校做开发的经历
查看>>
用Docker搭建Redis主从复制的集群
查看>>
盘点这些年我出的书,以及由此得到的收获
查看>>
用Python的Pandas和Matplotlib绘制股票KDJ指标线
查看>>
面试必问:对java多线程里Synchronized的思考
查看>>
最近接了本分布式组件面试书的选题,请大家一起来提意见
查看>>
Redis整合MySQL和MyCAT分库组件(来源是我的新书)
查看>>
Java程序员普遍存在的面试问题以及应对之道(新书第一章节摘录)
查看>>
程序员高效出书避坑和实践指南
查看>>
计算机方面毕业生怎样写简历
查看>>
从软件公司的异同点讲起,聊聊未来的程序员该如何选公司和谋规划
查看>>
我不想安于当前的限度,以达到所谓的幸福,回顾下2020年的我
查看>>
如何在面试中介绍自己的项目经验(面向java改进版)
查看>>
通过写n本书的积累,我似乎找到了写好技术文章的方法(回复送我写的python股票电子书)
查看>>
如果很好说出finalize用法,面试官会认为你很资深
查看>>
分析若干没面试机会和没体现实力的简历
查看>>
用python的matplotlib和numpy库绘制股票K线均线
查看>>
以互联网公司的经验告诉大家,架构师究竟比高级开发厉害在哪?
查看>>