206. 反转链表

图片.png

两个指针,第一个指针叫pre,最初是指向null的。
第二个指针cur指向head,然后不断遍历cur。
每次迭代到cur,都将cur的next指向pre,然后pre和cur前进一位。
都迭代完了(cur变成null了),pre就是最后一个节点了。

7d8712af4fbb870537607b1dd95d66c248eb178db4319919c32d9304ee85b602-迭代.gif

  1. class Solution {
  2. public ListNode reverseList(ListNode head) {
  3. //申请节点,pre和 cur,pre指向null
  4. ListNode pre = null;
  5. ListNode cur = head;
  6. ListNode tmp = null;
  7. while(cur!=null) {
  8. //记录当前节点的下一个节点
  9. tmp = cur.next;
  10. //然后将当前节点指向pre
  11. cur.next = pre;
  12. //pre和cur节点都前进一位
  13. pre = cur;
  14. cur = tmp;
  15. }
  16. return pre;
  17. }
  18. }
  1. func reverseList(head *ListNode) *ListNode {
  2. if head == nil||head.Next==nil{
  3. return head
  4. }
  5. var pre *ListNode
  6. cur := head
  7. for cur != nil{
  8. next := cur.Next
  9. cur.Next = pre
  10. pre = cur
  11. cur = next
  12. }
  13. return pre
  14. }

参考

https://leetcode-cn.com/problems/reverse-linked-list/solution/dong-hua-yan-shi-206-fan-zhuan-lian-biao-by-user74/