Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 612315d

Browse files
Merge pull request youngyangyang04#1311 from wzqwtt/patch03
添加(0707.设计链表、0206.翻转链表、0024.两两交换链表中的节点)Scala版本
2 parents cb042be + 83086c9 commit 612315d

File tree

3 files changed

+125
-1
lines changed

3 files changed

+125
-1
lines changed

‎problems/0024.两两交换链表中的节点.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,29 @@ func swapPairs(_ head: ListNode?) -> ListNode? {
311311
return dummyHead.next
312312
}
313313
```
314-
314+
Scala:
315+
```scala
316+
// 虚拟头节点
317+
object Solution {
318+
def swapPairs(head: ListNode): ListNode = {
319+
var dummy = new ListNode(0, head) // 虚拟头节点
320+
var pre = dummy
321+
var cur = head
322+
// 当pre的下一个和下下个都不为空,才进行两两转换
323+
while (pre.next != null && pre.next.next != null) {
324+
var tmp: ListNode = cur.next.next // 缓存下一次要进行转换的第一个节点
325+
pre.next = cur.next // 步骤一
326+
cur.next.next = cur // 步骤二
327+
cur.next = tmp // 步骤三
328+
// 下面是准备下一轮的交换
329+
pre = cur
330+
cur = tmp
331+
}
332+
// 最终返回dummy虚拟头节点的下一个,return可以省略
333+
dummy.next
334+
}
335+
}
336+
```
315337

316338
-----------------------
317339
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

‎problems/0206.翻转链表.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,40 @@ struct ListNode* reverseList(struct ListNode* head){
496496
return reverse(NULL, head);
497497
}
498498
```
499+
Scala:
499500

501+
双指针法:
502+
```scala
503+
object Solution {
504+
def reverseList(head: ListNode): ListNode = {
505+
var pre: ListNode = null
506+
var cur = head
507+
while (cur != null) {
508+
var tmp = cur.next
509+
cur.next = pre
510+
pre = cur
511+
cur = tmp
512+
}
513+
pre
514+
}
515+
}
516+
```
517+
递归法:
518+
```scala
519+
object Solution {
520+
def reverseList(head: ListNode): ListNode = {
521+
reverse(null, head)
522+
}
523+
524+
def reverse(pre: ListNode, cur: ListNode): ListNode = {
525+
if (cur == null) {
526+
return pre // 如果当前cur为空,则返回pre
527+
}
528+
val tmp: ListNode = cur.next
529+
cur.next = pre
530+
reverse(cur, tmp) // 此时cur成为前一个节点,tmp是当前节点
531+
}
532+
}
533+
```
500534
-----------------------
501535
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>

‎problems/0707.设计链表.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,7 +1154,75 @@ class MyLinkedList {
11541154
}
11551155
```
11561156

1157+
Scala:
1158+
```scala
1159+
class ListNode(_x: Int = 0, _next: ListNode = null) {
1160+
var next: ListNode = _next
1161+
var x: Int = _x
1162+
}
1163+
1164+
class MyLinkedList() {
1165+
1166+
var size = 0 // 链表尺寸
1167+
var dummy: ListNode = new ListNode(0) // 虚拟头节点
1168+
1169+
// 获取第index个节点的值
1170+
def get(index: Int): Int = {
1171+
if (index < 0 || index >= size) {
1172+
return -1;
1173+
}
1174+
var cur = dummy
1175+
for (i <- 0 to index) {
1176+
cur = cur.next
1177+
}
1178+
cur.x // 返回cur的值
1179+
}
1180+
1181+
// 在链表最前面插入一个节点
1182+
def addAtHead(`val`: Int) {
1183+
addAtIndex(0, `val`)
1184+
}
1185+
1186+
// 在链表最后面插入一个节点
1187+
def addAtTail(`val`: Int) {
1188+
addAtIndex(size, `val`)
1189+
}
1190+
1191+
// 在第index个节点之前插入一个新节点
1192+
// 如果index等于链表长度,则说明新插入的节点是尾巴
1193+
// 如果index等于0,则说明新插入的节点是头
1194+
// 如果index>链表长度,则说明为空
1195+
def addAtIndex(index: Int, `val`: Int) {
1196+
if (index > size) {
1197+
return
1198+
}
1199+
var loc = index // 因为参数index是val不可变类型,所以需要赋值给一个可变类型
1200+
if (index < 0) {
1201+
loc = 0
1202+
}
1203+
size += 1 //链表尺寸+1
1204+
var pre = dummy
1205+
for (i <- 0 until loc) {
1206+
pre = pre.next
1207+
}
1208+
val node: ListNode = new ListNode(`val`, pre.next)
1209+
pre.next = node
1210+
}
1211+
// 删除第index个节点
1212+
def deleteAtIndex(index: Int) {
1213+
if (index < 0 || index >= size) {
1214+
return
1215+
}
1216+
size -= 1
1217+
var pre = dummy
1218+
for (i <- 0 until index) {
1219+
pre = pre.next
1220+
}
1221+
pre.next = pre.next.next
1222+
}
11571223

1224+
}
1225+
```
11581226

11591227

11601228
-----------------------

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /