LeetCode热题100—链表(一)

160.相交链表

题目

给你两个单链表的头节点 headAheadB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null

图示两个链表在节点 c1 开始相交

img

题目数据 保证 整个链式结构中不存在环。

注意,函数返回结果后,链表必须 保持其原始结构

自定义评测:

评测系统 的输入如下(你设计的程序 不适用 此输入):

  • intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0

  • listA - 第一个链表

  • listB - 第二个链表

  • skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数

  • skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数

评测系统将根据这些输入创建链式数据结构,并将两个头节点 headAheadB 传递给你的程序。如果程序能够正确返回相交节点,那么你的解决方案将被 视作正确答案

思路

直接模拟,得到两个链表长度后让长的先走完两者差值然后再一起遍历,当两者相等时停下

代码如下:

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode* targetA = headA;
        ListNode* targetB = headB;
        int lengthA = 0,lengthB = 0;
        while(targetA || targetB){
            if(targetA){
                lengthA++;
                targetA = targetA->next;
            }
            if(targetB){
                lengthB++;
                targetB = targetB->next;
            }
        }
        if( lengthA > lengthB ){
            int len = lengthA-lengthB;
            while(len--){
                headA = headA->next;
            }
        }
        else{
            int len = lengthB-lengthA;
            while(len--){
                headB = headB->next;
            }
        }
        while(headA != headB && headA && headB){
            headA = headA->next;
            headB = headB->next;
        }
        if(headA == headB)return headA;
        else return NULL;
    }
};

206.反转链表

题目

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值