diff --git a/problems/0019.删除链表的倒数第N个节点.md b/problems/0019.删除链表的倒数第N个节点.md
index b3030a81..c36900bc 100644
--- a/problems/0019.删除链表的倒数第N个节点.md
+++ b/problems/0019.删除链表的倒数第N个节点.md
@@ -289,6 +289,28 @@ func removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? {
return dummyHead.next
}
```
-
+Scala:
+```scala
+object Solution {
+ def removeNthFromEnd(head: ListNode, n: Int): ListNode = {
+ val dummy = new ListNode(-1, head) // 定义虚拟头节点
+ var fast = head // 快指针从头开始走
+ var slow = dummy // 慢指针从虚拟头开始头
+ // 因为参数 n 是不可变量,所以不能使用 while(n>0){n-=1}的方式
+ for (i <- 0 until n) {
+ fast = fast.next
+ }
+ // 快指针和满指针一起走,直到fast走到null
+ while (fast != null) {
+ slow = slow.next
+ fast = fast.next
+ }
+ // 删除slow的下一个节点
+ slow.next = slow.next.next
+ // 返回虚拟头节点的下一个
+ dummy.next
+ }
+}
+```
-----------------------
diff --git a/problems/面试题02.07.链表相交.md b/problems/面试题02.07.链表相交.md
index 2e7226de..0a38cc33 100644
--- a/problems/面试题02.07.链表相交.md
+++ b/problems/面试题02.07.链表相交.md
@@ -317,7 +317,55 @@ ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
}
```
-
+Scala:
+```scala
+object Solution {
+ def getIntersectionNode(headA: ListNode, headB: ListNode): ListNode = {
+ var lenA = 0 // headA链表的长度
+ var lenB = 0 // headB链表的长度
+ var tmp = headA // 临时变量
+ // 统计headA的长度
+ while (tmp != null) {
+ lenA += 1;
+ tmp = tmp.next
+ }
+ // 统计headB的长度
+ tmp = headB // 临时变量赋值给headB
+ while (tmp != null) {
+ lenB += 1
+ tmp = tmp.next
+ }
+ // 因为传递过来的参数是不可变量,所以需要重新定义
+ var listA = headA
+ var listB = headB
+ // 两个链表的长度差
+ // 如果gap>0,lenA>lenB,headA(listA)链表往前移动gap步
+ // 如果gap<0,lenA 0) {
+ // 因为不可以i-=1,所以可以使用for
+ for (i <- 0 until gap) {
+ listA = listA.next // 链表headA(listA) 移动
+ }
+ } else {
+ gap = math.abs(gap) // 此刻gap为负值,取绝对值
+ for (i <- 0 until gap) {
+ listB = listB.next
+ }
+ }
+ // 现在两个链表同时往前走,如果相等则返回
+ while (listA != null && listB != null) {
+ if (listA == listB) {
+ return listA
+ }
+ listA = listA.next
+ listB = listB.next
+ }
+ // 如果链表没有相交则返回null,return可以省略
+ null
+ }
+}
+```
-----------------------