在ACM模式下依次输入链表节点值并且返回链表头结点,为了实现这个功能需要注意以下几点:
- 如何实现一次输入所有节点值
- 如何确定两个不同的节点所对应的节点值
- 如何实现节点间的连接并返回头结点
首先,需要定义一个链表类:
class ListNode {
public:
int val;
ListNode* next;
ListNode(int n) :val(n), next(nullptr) {}
ListNode(int n, ListNode* next) :val(n), next(next) {}
};
第二步,构造链表,先假设所有节点的值按顺序存放于一个vector容器里,并且节点值顺序即链表节点顺序
ListNode* getListNodemy(vector<int> &str) {
ListNode* dumyHead = new ListNode(-1);
ListNode* ptr = dumyHead;
int nums = str.size();
int i = 0;
while (i<nums) {
dumyHead->next =new ListNode(str[i]);
dumyHead = dumyHead->next;
i++;
}
return ptr->next;
}
第三步,按顺序输入节点值,为了实现一次输入所有节点值,这里采用输入字符串的形式来获取节点值
vector<int> getVector(string input) {
vector<int> ans;
stringstream ss;
ss.str(input);
string item;
char delim = ',';
while (getline(ss, item, delim)) {
ans.push_back(stoi(item));
}
cout << "节点输入完成" << endl;
return ans;
}
至此,链表的输入和生成全部实现。
|