leetcode链表相关题目(一)

206反转链表

题目描述:
请添加图片描述

思路:尽量做到一次遍历,每次反转一条链的时候要先保存下一个节点,防止反转后找不到下一个节点

public ListNode reverseList(ListNode head) {
        ListNode pre = null;//前一个节点
        ListNode temp = head;//当前节点
        while(temp != null){
            ListNode temp1 = temp.next;//提前存储下一个节点
            temp.next = pre;//反转
            pre = temp;//重置pre
            temp = temp1;//重置temp
        }
        return pre;//最后pre为原本的尾节点,反转后的首节点,temp == null
    }

160 相交链表

在这里插入图片描述

public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        /**
        定义两个指针, 第一轮让两个到达末尾的节点指向另一个链表的头部, 
        第一轮的交换正好抵消了长度差,
        若相交 等两个指针第二次到交点时正好走了相同的距离
        若不相交 两个指针第二次走到尾部时同时为null
         */
        if(headA == null || headB == null) return null;
        ListNode temp1 = headA;
        ListNode temp2 = headB;
       while(temp2 != temp1){
           temp1 = temp1 == null ? headB : temp1.next;
           temp2 = temp2 == null ? headA : temp2.next; 
       }
       return temp1;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值