反转一条单链表
Example:
Input: 1->2->3->4->5->NULL Output: 5->4->3->2->1->NULL
进阶:
请用迭代和递归的方法分别实现反转单链表
1:迭代方法,通过声明一个头指针进行节点与节点之间的链接
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
headNode = ListNode(0)
while head is not None:
temp = head.next
head.next = headNode.next
headNode.next = head
head = temp
return headNode.next
2:递归方法
class Solution(object):
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head:
return None
headAndCur = self.reverseList1(head)
return headAndCur[0].next
def reverseList1(self, head): #由于递归时,为了节省时间开支,需要传递头指针和当前节点,所以另声明一个函数
if not head.next:
headNode = ListNode(0) #头节点
curNode = ListNode(head.val) #当前节点
headNode.next = curNode
return [headNode, curNode]
tempList = self.reverseList1(head.next)
tempList[1].next = ListNode(head.val)
tempList[1] = tempList[1].next
return tempList
参考他人的代码:
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head:
return None
if not head.next:
return head
headNode = self.reverseList(head.next)
head.next.next = head
head.next = None
return headNode
算法题来自:https://leetcode-cn.com/problems/reverse-linked-list/description/