Информация об изменениях

Сообщение Re[11]: Зачем просят перевернуть строку на интервью? от 11.10.2018 3:48

Изменено 11.10.2018 4:52 Артём

Re[11]: Зачем просят перевернуть строку на интервью?
Здравствуйте, B0FEE664, Вы писали:

Тё>>>

Тё>>>class Node {
Тё>>>public:
Тё>>>char *value;
Тё>>>Node *next;
Тё>>>}

Тё>>>Node* reverse(Node *head) {
Тё>>>...
Тё>>>}

Тё>>>


BFE>Вот, что у меня получилось за 15 минут в 4 часа утра:


BFE>
BFE>Node* reverse(Node *head) 
BFE>{
BFE>  if ( nullptr == head )
BFE>    return head;

BFE>  Node* pPrev = nullptr;
BFE>  Node* pNext = head->next;

BFE>  while(nullptr != pNext)
BFE>  {
    head->>next = pPrev;
BFE>    pPrev      = head;
BFE>    head       = pNext;
BFE>    pNext      = head->next;
BFE>  } 
BFE>  return head;
BFE>}
BFE>


Есть лишние буквы. Так короче:
reverse(head *Node){

Node *prev = 0;
while(head) {
  Node *next = head.next;
  head.next = prev;
  prev = head;
  head = next;
}
return prev;
}



BFE>или

BFE>
BFE>Node* reverse2(Node *head) 
BFE>{
BFE>  if ( nullptr != head->next )
BFE>    return head;

BFE>  Node* pNewHead = reverse2(head->next);
  head->>next = head;

BFE>  return pNewHead;
BFE>}  

BFE>Node* reverse(Node *head) 
BFE>{
BFE>  if ( nullptr == head )
BFE>    return head;

BFE>  Node* pNewHead = reverse2(head->next);
  head->>next = nullptr;

BFE>  return pNewHead;
BFE>}
BFE>

BFE>

Опять много буков и зачем-то две функции вместо одной.

reverse(head *Node) {

  if(head && head.next){
    Node *reversed = reverse(head.next);
    reversed.next = head;
    head.next = 0;
    return reversed;
  }
  return head;
}
Re[11]: Зачем просят перевернуть строку на интервью?
Здравствуйте, B0FEE664, Вы писали:

Тё>>>

Тё>>>class Node {
Тё>>>public:
Тё>>>char *value;
Тё>>>Node *next;
Тё>>>}

Тё>>>Node* reverse(Node *head) {
Тё>>>...
Тё>>>}

Тё>>>


BFE>Вот, что у меня получилось за 15 минут в 4 часа утра:


BFE>
BFE>Node* reverse(Node *head) 
BFE>{
BFE>  if ( nullptr == head )
BFE>    return head;

BFE>  Node* pPrev = nullptr;
BFE>  Node* pNext = head->next;

BFE>  while(nullptr != pNext)
BFE>  {
    head->>next = pPrev;
BFE>    pPrev      = head;
BFE>    head       = pNext;
BFE>    pNext      = head->next;
BFE>  } 
BFE>  return head;
BFE>}
BFE>


Есть лишние буквы. Так короче:
reverse(head *Node){

Node *prev = 0;
while(head) {
  Node *next = head.next;
  head.next = prev;
  prev = head;
  head = next;
}
return prev;
}



BFE>или

BFE>
BFE>Node* reverse2(Node *head) 
BFE>{
BFE>  if ( nullptr != head->next )
BFE>    return head;

BFE>  Node* pNewHead = reverse2(head->next);
  head->>next = head;

BFE>  return pNewHead;
BFE>}  

BFE>Node* reverse(Node *head) 
BFE>{
BFE>  if ( nullptr == head )
BFE>    return head;

BFE>  Node* pNewHead = reverse2(head->next);
  head->>next = nullptr;

BFE>  return pNewHead;
BFE>}
BFE>

BFE>

Опять много буков и зачем-то две функции вместо одной.

reverse(head *Node, reversedHead *& Node) {

  if(head && head.next){
    Node *reversedTail = reverse(head.next, reversedHead);
    reversedTail.next = head;
    head.next = 0;
  } else {
    reversedHead = head;
  }
  return head;
}