题目
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
解题:
方法一:双指针迭代
我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的。
第二个指针 cur 指向 head,然后不断遍历 cur。
每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。
都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。
动画演示如下:
动画演示中其实省略了一个tmp
变量,这个tmp
变量会将cur
的下一个节点保存起来
python解法
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def reverseList(self, head: ListNode) -> ListNode: pre = None cur = head while cur: tmp = cur.next cur.next = pre pre =cur cur = tmp return pre
其他基本都是递归之类的方法,不太推荐。
c++解法
class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* pre=NULL; ListNode* cur=head; while(cur){ ListNode* tmp=cur->next; cur->next=pre; pre=cur; cur=tmp; } return pre; } };
java解法
class Solution { public ListNode reverseList(ListNode head) { ListNode pre=null; ListNode cur=head; while(cur!=null){ ListNode tmp=cur.next; cur.next=pre; pre=cur; cur=tmp; } return pre; } }