算法刷题笔记05 | 第二章 链表P2 | 24. 交换链表节点、19. 删除链表倒数第N个节点、(面试题)160. 链表相交、142环形链表II

两两交换链表中节点

重点是画图把哪个指针指哪里弄清楚 思路:三指针实现两个元素,分别指向对应元素以及前一个实现互换。

// 定义头节点
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个节点

思路:

  1. 遍历链表,得出size,从而获得索引
  2. 继续遍历,删除指定元素

这种方法无疑时间复杂度达到了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 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值