我有一个import React from 'react'
import './style.css'
class FormSample extends React.Component{
constructor(props){
super(props);
this.state={
fname:'',
lname:'',
email:'',
subject:'',
data:[]
}
}
handleFormSubmit(event){
event.preventDefault();
let items = [...this.state.data]
items.push({
fname: this.state.fname,
lname: this.state.lname,
email: this.state.email,
subject: this.state.subject
});
this.setState({
items,
// fname:'',
// lname:'',
// email:'',
// subject:'',
})
console.log(this.state)
}
render(){
return(
<div className="formData">
<p>Contact me</p>
<div>
<form action="#">
<label>first name</label>
<input
type="text"
id="fname"
name="firstname"
placeholder="your name..."
value={this.state.fname}
onChange={e => this.setState({fname: e.target.value})}/>
<label>last name</label>
<input
type="text"
id="lname"
name="lastname"
placeholder="last name.."
value={this.state.lname}
onChange={e => this.setState({lname: e.target.value})}/>
<label>Email</label>
<input
type="email"
id="email"
name="email"
placeholder="email"
value={this.state.email}
onChange={e => this.setState({email: e.target.value})}/>
<label>Subject</label>
<textarea
id="subject"
name="subject"
placeholder="write..."
value={this.state.subject}
onChange={e => this.setState({subject: e.target.value})}/>
<input type="submit" value="submit" onClick={e => this.handleFormSubmit(e)}/>
</form>
</div>
</div>
)
}
}
export default FormSample;
类来实现链接列表:
Node
在解决方案类中,我有插入,removeDuplicates,打印等方法;
现在class Node
{
public:
int data;
Node *next;
Node(int d){
data=d;
next=NULL;
}
};
,我的逻辑是:
这是我的代码:
removeDuplicates
当我调用Node* removeDuplicates(Node* head)
{
process(head);
return head;
}
void process(Node* node)
{
cout << node->data << endl;
if(node->next==NULL)
return;
if(node->data==node->next->data)
node=node->next;
process(node->next);
}
方法时,它会打印:
removeDuplicate
如预期的那样,但是在此之后,当我再次使用另一种方法打印时,它将为我提供整个链接列表,而不会删除重复项:
1
2
3
4
1 2 2 3 3 4
方法:
display
答案 0 :(得分:1)
问题出在您的流程功能中,请参阅下面的修改后的代码
void process(Node* node)
{
cout << node->data << endl;
if(node->next==NULL)
return;
if(node->data==node->next->data) {
Node *tmp = node->next;
node->next = tmp->next;
delete(tmp);
// node=node->next;
}
process(node->next);
}
答案 1 :(得分:0)
下面显示的是代码中的行,您可以在其中重复执行代码。
if(node->data==node->next->data)
node=node->next;
因此,您在这里所做的就是使节点指针移动到下一个节点。您应该编写代码,以便在重复的情况下跳过下一个节点,并且只能通过操纵当前节点的下一个指针来做到这一点。如下所示:
if(node->data==node->next->data)
node->next=node->next->next;
答案 2 :(得分:0)
如果您想保留代码的逻辑并获得预期的结果,则只需要添加一个字符即可。 您需要更换
void process(Node* node) {...}
使用
void process(Node*& node) {...}
输出将如您所愿。