链表专题更新cpp代码

This commit is contained in:
3119005212
2021-04-28 18:28:00 +08:00
parent 6d96954aa7
commit afd452aeda
15 changed files with 627 additions and 12 deletions

View File

@@ -26,14 +26,18 @@
### HashSet
这个方法是比较简单的主要思路就是先遍历一个链表将链表的所有值都存到哈希表然后再遍历另一个链表如果发现某个结点在哈希表中已经存在那我们直接返回该节点即可代码也很简单
这个方法是比较简单的主要思路就是先遍历一个链表将链表的所有值都存到Hashset然后再遍历另一个链表如果发现某个结点在Hashset中已经存在那我们直接返回该节点即可代码也很简单
**题目代码**
Java Code
```java
public class Solution {
public ListNode getIntersectionNode (ListNode headA, ListNode headB) {
ListNode tempa = headA;
ListNode tempb = headB;
//定义hash
//定义Hashset
HashSet<ListNode> arr = new HashSet<ListNode>();
while (tempa != null) {
arr.add(tempa);
@@ -45,12 +49,36 @@ public class Solution {
}
tempb = tempb.next;
}
return tempb;
return tempb;
}
}
```
C++ Code:
```cpp
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode * tempa = headA;
ListNode * tempb = headB;
//定义Hashset, cpp对应set
set <ListNode *> arr;
while (tempa != nullptr) {
arr.insert(tempa);
tempa = tempa->next;
}
while (tempb != nullptr) {
if (arr.find(tempb) != arr.end()) {
return tempb;
}
tempb = tempb->next;
}
return tempb;
}
};
```
下面这个方法比较巧妙不是特别容易想到大家可以自己实现一下这个方法也是利用我们的双指针思想
下面我们直接看动图吧特别直观一下就可以搞懂
@@ -59,6 +87,10 @@ public class Solution {
是不是一下就懂了呀我们利用双指针当某一指针遍历完链表之后然后掉头去另一个链表的头部继续遍历因为速度相同所以他们第二次遍历的时候肯定会相遇是不是很浪漫啊
**题目代码**
Java Code
```java
public class Solution {
public ListNode getIntersectionNode (ListNode headA, ListNode headB) {
@@ -76,7 +108,25 @@ public class Solution {
}
```
C++ Code
```cpp
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
//定义两个节点
ListNode * tempa = headA;
ListNode * tempb = headB;
//循环
while (tempa != tempb) {
//如果不为空就指针下移,为空就跳到另一链表的头部
tempa = tempa != nullptr ? tempa->next: headB;
tempb = tempb != nullptr ? tempb->next: headA;
}
return tempa;
}
};
```
好啦链表的题目就结束啦希望大家能有所收获下周就要更新新的题型啦继续坚持肯定会有收获的