template <class T>
bool SingleList<T>::Delsame(T x)
{
Node<T> *head;
if(NULL == head) return head;
Node<T> *p=head;
Node<T> *first=NULL;
while(NULL != p){
if(p->element == x){
Node<T> *del =p;
p=p->link;
if(NULL!= first){
first->link=p;
}else{
head=p;
}
delete del;
} else{
first=p;
p=p->link;
}
}
return head;
}
代码如上,如 1 2 3 2 4 5 2
需要删除所有的2,
希望得到的结果是1 3 4 5
但目前得到的是1 2 3 4 5,
以及存在无法删除只有一个的元素、连续相同元素无法删除的问题,
如何修改可以将所有相同元素都删去呢?
大家讲道理2017-04-17 15:31:02
로 바꾸는 것이 좋습니다. <..> <<>
IF 조건에서 에 대한 알고리즘을 제공하십시오
. <🎜 🎜>.
head
를 가리키기 위해 a head
를 정의 할 필요가없는 것 같습니다.变> 현재 포인터를 변경합니다. <..> <<>
first
<注意> 참고 : <注意 注意>
last
p
class SingleList {
constructor() {
this.head = null;
this.tail = null;
}
print(tag) {
let current = this.head;
function* iterate() {
while (current) {
yield current.value;
current = current.next;
}
}
console.log(`${tag}: ${Array.from(iterate())}`);
}
add(...args) {
let current = this.findTail();
args.forEach(v => {
if (current) {
current.next = {
value: v
};
current = current.next;
} else {
this.head = current = {
value: v
};
}
});
}
findTail() {
if (!this.head) {
return null;
}
let current = this.head;
while (current.next) {
current = current.next;
}
return current;
}
remove(v) {
let current = this.head;
let last = null;
while (current) {
if (current.value === v) {
if (last) {
last.next = current.next;
} else {
this.head = current.next;
}
current = current.next;
} else {
last = current;
current = current.next;
}
}
}
}
function main() {
const list = new SingleList();
list.add(1, 2, 3, 2, 4, 5, 2);
list.print("原始值");
list.remove(2);
list.print("删除 2");
list.add(2, 3, 1, 3, 1);
list.print("新增值");
list.remove(1);
list.print("删除 1");
}
main();
current
<<> <<>
PHP中文网2017-04-17 15:31:02
으아악
왼쪽이 닫히고 오른쪽이 열리는 간격입니다. 즉, [첫 번째, 마지막) 범위 내의 데이터
사용 예: li.Remove(3)
여기서: 시작 끝은 다음과 같습니다.
효과는 다음과 같습니다.