天天看点

六六力扣刷题双指针之反转链表

前言

之前小六六一直觉得自己的算法比较菜,算是一个短板吧,以前刷题也还真是三天打鱼,两天晒网,刷几天,然后就慢慢的不坚持了,所以这次,借助平台的活动,打算慢慢的开始开刷,并且自己还会给刷的题总结下,谈谈自己的一些思考,和自己的思路等等,希望对小伙伴能有所帮助吧,也可以借此机会把自己短板补一补,希望自己能坚持下去呀

链表的合集

  • ​​六六力扣刷题哈希表之哈希理论​​
  • ​​六六力扣刷题哈希表之有效的字母异位词​​
  • ​​六六力扣刷题哈希表之两个数组的交集​​
  • ​​六六力扣刷题哈希表之快乐数​​
  • ​​六六力扣刷题哈希表之赎金信​​
  • ​​六六力扣刷题哈希表之三数之和​​

字符串

  • ​​六六力扣刷题字符串之反转字符串​​
  • ​​六六力扣刷题字符串之反转字符串2​​
  • ​​六六力扣刷题字符串之替换空格​​
  • ​​六六力扣刷题字符串之反转字符串中的单词​​
  • ​​六六力扣刷题字符串之找出字符串中第一个匹配项的下​​
  • ​​六六力扣刷题字符串之重复的子字符串​​

双指针

  • ​​六六力扣刷题双指针之移除元素​​
  • ​​六六力扣刷题双指针之删除链表的倒数第N个节点​​
  • ​​六六力扣刷题双指针之链表相交​​
  • ​​六六力扣刷题双指针之三数之和​​

题目

给你单链表的头节点 ​

​head​

​ ,请你反转链表,并返回反转后的链表。

示例 1

六六力扣刷题双指针之反转链表
输入: head = [1,2,3,4,5]
输出: [5,4,3,2,1]      

示例 2:

六六力扣刷题双指针之反转链表
输入: head = [1,2]
输出: [2,1]      

迭代

假设链表为 1 -> 2 ->3 1→2→3→∅,我们想要把它改成 1<-2<-3∅←1←2←3。

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode curr = head;
        while (curr != null) {
            ListNode next = curr.next;
            curr.next = prev;
            prev = curr;
            curr = next;
        }
        return prev;
    }
}      

双指针

class Solution {
  public ListNode reverseList(ListNode head) {
    //申请节点,pre和 cur,pre指向null
    ListNode pre = null;
    ListNode cur = head;
    ListNode tmp = null;
    while(cur!=null) {
      //记录当前节点的下一个节点
      tmp = cur.next;
      //然后将当前节点指向pre
      cur.next = pre;
      //pre和cur节点都前进一位
      pre = cur;
      cur = tmp;
    }
    return pre;
  }
}      

结束

继续阅读