1. 题目分析
这道题,我们也用两种方法来写
- 基本思想1:
- 反转这种的,我们都可以想到栈这种数据结构
- 利用栈的特性就能解决
- 基本思想2:
- 使用双指针,定义一个前驱指针pre,再定义一个当前节点cur
- cur.next = pre,这样就能实现反转
这一次,我们拉钩方法都用,基本思想1我们用java来实现,基本思想2用python来实现
2. 代码实现
2.1. Python代码(基本思想2)
# 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
"""
pre = None
cur = head
while cur != None:
t_cur = cur.next
cur.next = pre
pre = cur
cur = t_cur
return pre
2.2. 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) {
ListNode cur = head;
Stack stack = new Stack();
while(cur != null){
stack.add(cur);
cur = cur.next;
}
cur = new ListNode(0);
ListNode new_head = cur;
ListNode value = null;
while(stack.size() != 0){
value = (ListNode)stack.pop();
cur.next = value;
cur = cur.next;
}
cur.next = null;
return new_head.next;
}
}