这样的话如果两个列表没有相交节点怎么办呢
时间: 2023-12-08 12:04:58 浏览: 19
如果两个链表没有相交节点,那么最终双指针会同时到达链表的尾部,此时pa和pb都会指向NULL。根据题目要求,我们需要返回NULL来表示两个链表没有交点。所以在代码中,如果pa和pb同时变为NULL,就可以直接返回NULL。
以下是修改后的代码:
```cpp
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *pa = headA;
ListNode *pb = headB;
while(pa != pb) {
pa = (pa != NULL) ? pa->next : headB;
pb = (pb != NULL) ? pb->next : headA;
// 判断是否没有交点,如果pa和pb同时变为NULL,则返回NULL
if (pa == NULL && pb == NULL) {
return NULL;
}
}
return pa;
}
```
这样修改后,如果两个链表没有相交节点,函数会返回NULL。如果有任何其他问题,请随时提问。
相关问题
python两个列表求不相交
可以使用set的差集来求两个列表的不相交部分。具体代码如下:
```python
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
set1 = set(list1)
set2 = set(list2)
disjoint = list(set1 - set2) + list(set2 - set1)
print(disjoint) # [1, 2, 3, 6, 7, 8]
```
以上代码中,先把两个列表转换成set,然后通过set的差集操作得到不相交的部分。最后再把两个差集合并成一个列表。
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
这是一个编程类的问题,我可以回答。这个问题可以使用双指针法来解决。首先遍历两个链表,得到它们的长度。然后让较长的链表的指针先走 abs(lenA - lenB) 步,使得两个链表剩余的长度相等。然后同时遍历两个链表,找到第一个相同的节点即为相交节点。如果没有相交节点,则返回 null。
以下是示例代码:
```
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
int lenA = getLength(headA);
int lenB = getLength(headB);
ListNode pA = headA, pB = headB;
int diff = Math.abs(lenA - lenB);
if (lenA > lenB) {
while (diff-- > 0) {
pA = pA.next;
}
} else {
while (diff-- > 0) {
pB = pB.next;
}
}
while (pA != null && pB != null) {
if (pA == pB) {
return pA;
}
pA = pA.next;
pB = pB.next;
}
return null;
}
private int getLength(ListNode head) {
int len = 0;
ListNode p = head;
while (p != null) {
len++;
p = p.next;
}
return len;
}
```