反转链表
例如:
输入:1 -> 2 -> 3 -> 4 -> 5 -> None
输出:5 -> 4 -> 3 -> 2 -> 1 -> None
其实就是设置一个新的节点(NULL),然后定义两个指针 pre
和 cur
,
pre
指向新的节点;cur
指向头节点
然后依次往后改变指针的指向
代码
(Python)
# 反转链表
class Node():
def __init__(self,item=None):
self.value = item
self.next = None
def reverse_List(node):
now = None
p = node
while p:
temp = p.next
p.next = now
now = p
p = temp
return now
a = Node(1)
b = Node(2)
c = Node(3)
a.next = b
b.next = c
result = reverse_List(a)
print(result.value,end=' ')
print(result.next.value,end=' ')
print(result.next.next.value)
"""
results:
3 2 1
"""
(C++)
// 定义节点
struct ListNode{
int val;
ListNode* next;
ListNode(): val(0), next(nullptr) {}
ListNode(int x): val(x), next(nullptr) {}
ListNode(int x, ListNode* head): val(x), next(head) {}
};
class Solution{
public:
ListNode* reverseList(ListNode* head) {
ListNode* pre = NULL;
ListNode* cur = head;
while (cur) {
ListNode* temp = cur->next;
cur->next = pre; // 改变指针指向,让节点往前
pre = cur;
cur = temp;
}
return pre;
};