LeetCode 솔루션 분류
1721. Swapping Nodes in a Linked List
본문
[Leetcode 시즌 3] 2022년 4월 4일 문제입니다.
[Medium] 1721. Swapping Nodes in a Linked List

[Medium] 1721. Swapping Nodes in a Linked List
You are given the head of a linked list, and an integer k.
Return the head of the linked list after swapping the values of the kth node from the beginning and the kth node from the end (the list is 1-indexed).
Example 1:

Input: head = [1,2,3,4,5], k = 2 Output: [1,4,3,2,5]
Example 2:
Input: head = [7,9,6,6,7,8,3,0,9,5], k = 5 Output: [7,9,6,6,8,7,3,0,9,5]
Constraints:
- The number of nodes in the list is
n. 1 <= k <= n <= 1050 <= Node.val <= 100
관련자료
-
링크
댓글 8
핸디맨님의 댓글
- 익명
- 작성일
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapNodes(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
swapNode = head
fastNode = head
for _ in range(k-1):
fastNode = fastNode.next
swapNode = swapNode.next
slowNode = head
while fastNode.next is not None:
fastNode = fastNode.next
slowNode = slowNode.next
swapNode.val, slowNode.val= slowNode.val, swapNode.val
return headStew님의 댓글
- 익명
- 작성일
class Solution:
def swapNodes(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
elements, current = [], head
while current:
elements.append(current)
current = current.next
if k > len(elements) // 2 + 1:
k = len(elements) - k + 1
elements[k - 1].val, elements[-k].val = elements[-k].val, elements[k - 1].val
return headbobkim님의 댓글
- 익명
- 작성일
class Solution {
public:
ListNode* swapNodes(ListNode* head, int k) {
int tmp;
ListNode *backNode=NULL;
ListNode *frontNode=NULL;
ListNode *ListNodeTmp=head;
int ListSize=0;
while(ListNodeTmp!=NULL){
ListSize++;
if(ListSize==k){
frontNode=ListNodeTmp;
};
ListNodeTmp=ListNodeTmp->next;
};
ListNodeTmp=head;
for(int i=0;i<ListSize-k;i++){
ListNodeTmp=ListNodeTmp->next;
};
backNode=ListNodeTmp;
tmp=frontNode->val;
frontNode->val=backNode->val;
backNode->val=tmp;
return head;
};
};CANUS님의 댓글
- 익명
- 작성일
class Solution {
func swapNodes(_ head: ListNode?, _ k: Int) -> ListNode? {
var node: ListNode? = head
var count = 0
var frontNode: ListNode?
var backNode: ListNode?
while true {
count += 1
if count == k {
frontNode = node
}
if let next = node?.next {
node = node?.next
} else {
break
}
}
var back = count - k
node = head
while back > 0 {
back -= 1
node = node?.next
}
backNode = node
guard frontNode != nil else { return nil }
guard backNode != nil else { return nil }
let val = frontNode!.val
frontNode!.val = backNode!.val
backNode!.val = val
return head
}
}9dea0936님의 댓글
- 익명
- 작성일
class Solution:
def swapNodes(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
p1, p2, idx, temp, idx2 = 0, 0, 0, head, 0
while temp:
if idx + 1 == k:
p1 = temp
idx += 1
temp = temp.next
temp = head
while temp:
if idx - (idx2) == k:
p2 = temp
idx2 += 1
temp = temp.next
p1.val, p2.val = p2.val, p1.val
return headJasonMin님의 댓글
- 익명
- 작성일
package main
import "fmt"
type Node struct {
val int
next *Node
}
type List struct {
head *Node
len int
}
func (l *List) Insert(value int) {
node := &Node{val: value, next: nil}
if l.head == nil {
l.head = node
l.len += 1
} else {
x := l.head
for x.next != nil {
x = x.next
}
x.next = node
l.len += 1
}
}
func Show(l *List) {
e := l.head
for i := 0; i < l.len; i++ {
fmt.Println(e.val)
e = e.next
}
}
func (l *List) Swap(idx int) {
gIx := idx - 1
tIx := l.len - gIx - 1
e := l.head
node := &Node{}
for i := 0; i < l.len; i++ {
if gIx == i {
node = e
}
if tIx == i {
e.val, node.val = node.val, e.val
}
e = e.next
}
}
func main() {
l := List{}
for i := 1; i <= 5; i++ {
l.Insert(i)
}
l.Swap(2)
Show(&l)
}








