問題描述
Reverse a singly linked list.
補充說明:
這個題目簡單粗暴,就是讓你把一個單鏈表進行翻轉(zhuǎn)。舉個栗子:
單鏈表1>3>4>2翻轉(zhuǎn)后的結(jié)果為2>4>3>1钱慢。
方案分析
- 鏈表的操作估計大家都會诵棵,自然而然的想到的肯定是相鄰兩個節(jié)點之間的交換問題两蟀,能想到這一步已經(jīng)成功了三分之一了。
- 現(xiàn)在繼續(xù)分析碧注,確定翻轉(zhuǎn)鏈表需要幾個指針嚣伐。head指針,這個毋庸置疑萍丐。cur_node:當(dāng)前操作的指針, next_node:當(dāng)前操作指針的下一個指針轩端。這里這個必須,否則在操作cur_node指針的時候無法找到后續(xù)的節(jié)點了逝变。
- 交換鏈表元素相信大家都會基茵,但是這里有個問題,cur_node.next=next_node.next這步驟肯定不能缺失壳影,那另外一個指針付給誰拱层,cur_node? No,應(yīng)該給head宴咧。Why根灯? 大白話來講就是,一言不合扔到最前端掺栅。參見我畫的流程圖:翻轉(zhuǎn)流程.
python實現(xiàn)
# !-*- coding:utf8 -*-
# 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
"""
if head is None or head.next is None:
return head
# 長度超過兩位
cur_node = head
next_node = head.next
while(next_node is not None):
cur_node.next = next_node.next
next_node.next = head
head = next_node
next_node = cur_node.next
return head