来源:https://leetcode.com/problems/reverse-linked-list
Reverse a singly linked list.
递归方法:递归调用直到最后一个节点再开始反转,注意保存反转后的头结点返回
Java
1 /**
2 * Definition for singly-linked list.
3 * public class ListNode {
4 * int val;
5 * ListNode next;
6 * ListNode(int x) { val = x; }
7 * }
8 */
9 class Solution {
10 public ListNode reverseList(ListNode head) {
11 if(head == null || head.next == null) {
12 return head;
13 }
14 ListNode newHead = reverseList(head.next);
15 head.next.next = head;
16 head.next = null;
17 return newHead;
18 }
19 }
Python
1 # -*- coding:utf-8 -*-
2 # 递归
3 # class ListNode:
4 # def __init__(self, x):
5 # self.val = x
6 # self.next = None
7 class Solution:
8 # 返回ListNode
9 def ReverseList(self, pHead):
10 # write code here
11 if pHead == None or pHead.next == None:
12 return pHead
13 tmp = self.ReverseList(pHead.next)
14 pHead.next.next = pHead
15 pHead.next = None
16 return tmp
迭代方法:两个指针从头开始依次反转,注意保存下一次反转的节点指针
Java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null || head.next == null) {
return head;
}
ListNode pre = head, cur = head.next, next = null;
while(cur != null) {
next = cur.next;
cur.next = pre;
if(pre == head) {
pre.next = null;
}
pre = cur;
cur = next;
}
return pre;
}
}
Python
# -*- coding:utf-8 -*-
# 迭代
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
if pHead == None or pHead.next == None:
return pHead
pre_node, cur_node = pHead, pHead.next
while pre_node and cur_node:
tmp_node = cur_node.next
cur_node.next = pre_node
pre_node = cur_node
cur_node = tmp_node
pHead.next = None
return pre_node