两两交换链表中节点
重点是画图把哪个指针指哪里弄清楚 思路:三指针实现两个元素,分别指向对应元素以及前一个实现互换。
// 定义头节点
ListNode h = new ListNode(-1,head);
// 指针
ListNode pre = h;
ListNode cur1;
ListNode cur2;
while (pre.next != null && pre.next.next != null){
// 定义位置
cur1 = pre.next;
cur2 = pre.next.next;
// 交换位置
cur1.next = cur2.next;
cur2.next = cur1;
pre.next = cur2;
pre = cur1;
}
return h.next;
19 删除链表的倒数第N个节点
思路:
- 遍历链表,得出size,从而获得索引
- 继续遍历,删除指定元素
这种方法无疑时间复杂度达到了O(n2)
看文档
巧妙地运用倒数第n个的特点解决问题。 思路: 双指针:设置两个指针间距为n,当遍历完链表后前指针即为倒数第n个元素
// 方法1:
/*
* 遍历链表,得出size,从而获得索引
* 继续遍历,删除索引元素
* */
// 方法2:
/*
* 设置两个指针间距为n,当遍历完链表后前指针即为倒数第n个元素
* */
// 定义头节点
ListNode h = new ListNode(-1,head);
ListNode low = head;
ListNode fast = low;
ListNode pre = h;
for (; n - 1 > 0;n--){
fast = fast.next;
}
while (fast.next != null){
pre = pre.next;
fast =

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



