leetcode刷题206 反转链表 Reverse Linked List(简单) Python Java

题目大意:

反转一个单链表。

示例:

输入: 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 = None

class 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;  	              
	 }  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值