本文共 1124 字,大约阅读时间需要 3 分钟。
链表是通过指针串联在一起的线性数据结构,每个节点由数据域和指针域组成。单链表的每个节点仅有一个指针域指向下一个节点,而双链表则有两个指针域,分别指向上一个和下一个节点。循环链表则形成一个环。
数组是连续内存空间上的数据集,可以通过下标访问元素。然而,增删元素时会导致连续内存空间的移动,时间复杂度为O(n),不适合频繁操作。
LeetCode344: 反转字符串()
编写一个函数将输入字符串反转。输入字符串以char数组形式给出,要求原地修改输入数组,使用O(1)额外空间。
示例1: 输入:["h", "e", "l", "l", "o"] 输出:["o", "l", "l", "e", "h"]
示例2: 输入:["H", "a", "n", "n", "a", "h"] 输出:["h", "a", "n", "n", "a", "H"]
使用双指针交换字符位置,原地反转数组:
public void reverseString(char[] s) { int i = 0, j = s.length - 1; while (i < j) { char temp = s[i]; s[i] = s[j]; s[j] = temp; i++; j--; }}
LeetCode206: 反转链表
反转单链表,输入1→2→3→4→5→NULL,输出5→4→3→2→1→NULL。
示例: 输入:1→2→3→4→5→NULL 输出:5→4→3→2→1→NULL
通过遍历链表,逐个节点反转指针:
public class Solution { public ListNode reverseList(ListNode head) { ListNode cur = head; ListNode pre = null; while (cur != null) { ListNode temp = cur.next; cur.next = pre; pre = cur; cur = temp; } return pre; }}
注意事项:
temp
保存当前节点的下一个节点。pre
,实现反转。pre
指针和cur
指针,逐步遍历链表。通过双指针交换,实现链表反转,时间复杂度为O(n),空间复杂度为O(1)。
转载地址:http://elri.baihongyu.com/