python/golang 링크 의 요 소 를 삭제 합 니 다.
golang 구현:
type Node struct {
value int
next *Node
}
type Link struct {
head *Node
tail *Node
lenth int
}
//
func (link *Link) add(v int) {
if link.lenth == 0 { //
link.head = &Node{v, nil}
link.tail = link.head
link.lenth = 1
} else {
newNond := &Node{v, nil}
link.tail.next = newNond
link.tail = newNond
link.lenth += 1
}
}
// ( )
func (link *Link) remove(v int) {
if link.lenth == 0 {
fmt.Println(" , ")
return
}
var previous *Node = nil
for current := link.head; current != nil; current = current.next {
if current.value == v {
if current == link.head { //
link.head = current.next
} else if current == link.tail { //
previous.next = nil
link.tail = previous
} else { //
previous.next = current.next
}
link.lenth -= 1
break
}
previous = current
}
}
//
func (link *Link) printList() {
if link.lenth == 0 {
fmt.Println(" ")
return
}
for cur := link.head; cur != nil; cur = cur.next {
fmt.Printf("%d ", cur.value)
}
fmt.Println()
}
python 구현:
class Node:
def __init__(self, value, next):
self.value = value
self.next = next
def __str__(self):
return str(self.value)
class Link:
def __init__(self):
self.head = None
self.tail = None
self.lenth = 0
#
def add(self, v):
if self.lenth == 0: #
self.head = Node(v, None)
self.tail = self.head
self.lenth = 1
else:
new_node = Node(v, None)
self.tail.next = new_node
self.tail = new_node
self.lenth += 1
#
def print(self):
if self.lenth == 0:
print(' ')
return
cur = self.head
while True:
if cur == None:
print()
break
print(cur, end=' ')
cur = cur.next
#
def remove(self, v):
if self.lenth == 0:
return
cur = self.head
pre = None
while True:
if cur.value == v:
if cur == self.head: #
self.head = cur.next
elif cur == self.tail: #
pre.next = None
self.tail = pre
else: #
pre.next = cur.next
self.lenth -= 1
break
pre = cur
cur = cur.next
if cur == None:
print(" ", v)
break
하나의 포인터 만 사용 하여 링크 를 삭제 합 니 다:golang 구현:
func (link *Link) remove_with_one_pointer(v int) {
if link.lenth == 0 {
return
}
if link.tail.value == v { // ,
if link.lenth == 1 { //
link.head = nil
link.tail = nil
} else { //
cur := link.head
for ; cur.next.next != nil; cur = cur.next {
} //
cur.next = nil
link.tail = cur
}
link.lenth -= 1
return
}
// /
for cur := link.head; cur != nil; cur = cur.next {
if cur.value == v {
cur.value = cur.next.value
cur.next = cur.next.next
link.lenth -= 1
return
}
}
fmt.Println(" ", v)
}
python 구현:
def remove_with_one_pointer(self, v):
if self.lenth == 0:
return
if self.tail.value == v: # ,
if self.lenth == 1: #
self.head = None
self.tail = None
else: #
cur = self.head
while True:
if cur.next.next is None: #
break
else:
cur = cur.next
cur.next = None
self.tail = cur
self.lenth -= 1
return
# /
cur = self.head
while True:
if cur.value == v:
cur.value = cur.next.value
cur.next = cur.next.next
self.lenth -= 1
break
cur = cur.next
if cur is None:
print(' ', v)
break
이상 은 python/golang 에서 링크 의 요 소 를 삭제 하 는 상세 한 내용 입 니 다.python/golang 링크 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.