我想寫一個方法,看看值的列表,並確定如果他們正在增加或否真或假是否值列表增加?
例如,對於包含head-()(11)(8)( 15)(3),isIncreasing()應該返回false。但是,在包含head-()(7)(9)(15)的列表上工作時,它將返回true。
我發現自己越來越沮喪與這個問題,它真的難倒我。如果有人能拼湊一些代碼,它會創造奇蹟。由於我想查看每個數字的情況,總會給我帶來問題。
我開始寫出來與簽名
bool List<Object>::isIncreasing() const;
,並從那裏方法我不知道從哪裏開始
任何幫助嗎?
由於一噸
編輯 實施
#ifndef LIST_CPP
#define LIST_CPP
#include "List.h"
namespace cs20 {
template <class Object>
List<Object>::List() {
head = new ListNode<Object>;
}
template <class Object>
List<Object>::List(const List<Object>& rhs) {
head = new ListNode<Object>;
*this = rhs;
}
template <class Object>
List<Object>::~List() {
makeEmpty();
delete head;
}
template <class Object>
bool List<Object>::isEmpty() const {
return(head->nextIsNull());
}
template <class Object>
void List<Object>::makeEmpty() {
while (!isEmpty()) {
remove(first().retrieve());
}
}
template <class Object>
ListIterator<Object> List<Object>::zeroth() const {
return(ListIterator<Object>(head));
}
template <class Object>
ListIterator<Object> List<Object>::first() const {
return(ListIterator<Object>(head->getNext()));
}
template <class Object>
void List<Object>::insert(const Object& data,
const ListIterator<Object> &iter) {
if (iter.isValid()) {
ListNode<Object>* newnode = new ListNode<Object>(data, iter.current->getNext());
iter.current->setNext(newnode);
}
}
template <class Object>
void List<Object>::insert(const Object& data) {
// insert after the header node
ListNode<Object>* newnode = new ListNode<Object>(data, head->getNext());
head->setNext(newnode);
}
template <class Object>
ListIterator<Object> List<Object>::findPrevious(const Object& data) const {
ListNode<Object>* node = head;
while(node->getNext() != NULL && node->getNext()->getElement() != data) {
node = node->getNext();
}
if (node->getNext() == NULL) {
node = NULL;
}
return ListIterator<Object>(node);
}
template <class Object>
bool List<Object>::isIncreasing() const {
}
template <class Object>
void List<Object>::insert_back(const Object& data) {
ListNode<Object>* newnode = new ListNode<Object>(data, NULL);
ListNode<Object>* lastNode = head;
while (lastNode->getNext()!= NULL && lastNode->getNext()->getElement() != data)
lastNode = lastNode->getNext();
lastNode->setNext(newnode);
}
template <class Object>
void List<Object>::remove(const Object& data) {
ListIterator<Object> iter = findPrevious(data);
if (iter.isValid()) {
ListNode<Object>* node = findPrevious(data).current;
if (node->getNext() != NULL) {
ListNode<Object> *oldNode = node->getNext();
node->setNext(node->getNext()->getNext()); // Skip oldNode
delete oldNode;
}
}
}
// Deep copy of linked list
template <class Object>
const List<Object>& List<Object>::operator =(const List<Object>& rhs) {
if (this != &rhs) {
makeEmpty();
ListIterator<Object> rightiter = rhs.first();
ListIterator<Object> myiterator = zeroth();
while(rightiter.isValid()) {
insert(rightiter.retrieve(), myiterator);
rightiter.advance();
myiterator.advance();
}
}
return(*this);
}
}
#endif
EDIT 2 下面是一個的需求增強應該如何工作的 「產出」
測試提示:
運行方法:插入(3);插入(2);插入(1); 打印清單。它應該是什麼樣子? 調用:isIncreasing();它應該返回什麼? 打印清單。它應該是什麼樣子? 運行方法:remove(3);刪除(2); 打印清單。它應該是什麼樣子? 調用:isIncreasing();它應該返回什麼? 打印清單。它應該是什麼樣子? 運行方法:remove(1); 運行方法:insert(7);插入(9);插入(11); 打印清單。它應該是什麼樣子? 調用:isIncreasing();它應該返回什麼? 打印清單。它應該是什麼樣子?
,如果這是家庭作業請標記爲 –
列表本身是由您執行還是您正在使用內置類型或庫? – LostBoy
@OmryYadan好的,謝謝 – cbr4267