博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode刷题206 反转链表 Reverse Linked List(简单) Python Java
阅读量:4129 次
发布时间:2019-05-25

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

题目大意:

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL 

输出: 5->4->3->2->1->NULL

进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

解法一:

思路:通过迭代将节点重组,前面的节点转移到重组链表的后面,实际上就是头结点的倒插操作。

遍历链表,迭代前节点prev,缓存当前节点current的下一节点,然后把当前节点的next指针指向前节点prev。

# Definition for singly-linked list.# class ListNode(object):#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution(object):    def reverseList(self, head):        """        :type head: ListNode        :rtype: ListNode        """        current = head # 终止条件是current=NULL        prev = None        while current:            tmp = current.next            current.next = prev            prev = current            current = tmp        return prev

 

以下是Java版本:

解题:

采用最直接的思路,从链表的第二个节点开始向后遍历,将每一个遍历的节点插入作为当前的第一个节点,为了方便操作,我们定义一个fakeNode节点指向第一个节点,后面需要插入的节点需要做两件事:一,使需要插入的节点的next指向当前链表中的第一个节点(即fakeNode的下一个节点);二,让fakeNodenext指向需要插入的那个节点。经过这两个操作需要插入的节点就成为了当前链表的第一个节点。

代码:

public static ListNode reverseList(ListNode head) {  	         if(head==null||head.next==null)//0或一个节点的时候直接返回  	             return head;  	         ListNode fakeNode=new ListNode(-1);  	         fakeNode.next=head;  	         ListNode cur=head.next;//从第2个节点开始  	         head.next=null;//将第一个结点的next设为Null(反转之后第一个结点就是最后一个节点)  	         while(cur!=null)  	         {  	             ListNode nextcur=cur.next;  	             cur.next=fakeNode.next;  	             fakeNode.next=cur;  	             cur=nextcur;                	         }  	         return fakeNode.next;  	              	 }

 

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

你可能感兴趣的文章
[转]C语言printf
查看>>
C 语言 学习---获取文本框内容及字符串拼接
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
一篇搞懂Java反射机制
查看>>
application/x-www-form-urlencoded、multipart/form-data、text/plain
查看>>
Longest Common Prefix -最长公共前缀
查看>>
Letter Combinations of a Phone Number
查看>>
Single Number II --出现一次的数(重)
查看>>
Valid Parentheses --括号匹配
查看>>
Count and Say
查看>>
Palindrome Partitioning --回文切割 深搜(重重)
查看>>
Valid Palindrome 简单的回文判断
查看>>
对话周鸿袆:从程序员创业谈起
查看>>