Поменяйте местами каждый 1-й и 3-й элемент данных в LinkedList по рекурсии - PullRequest
0 голосов
/ 05 июня 2018

Я определил узел как

class Node
{
    int data ;
    Node next ;
    Node(int data)
    {
        this.data = data ;
        next = null ;
    }
}

У меня проблемы с написанием рекурсивного кода.Итерация работает просто отлично.Это мой кодИдея состоит в том, чтобы проверить, является ли список нулевым.Если нет, то проверьте, существует ли третий элемент.Если это так, поменяйте местами данные.Затем перейдите к следующему узлу, который является 4-м.Затем вызовите рекурсивную функцию для следующего узла.Что не так с моей идеей?

public class change_1_and_3 {

Node head ;

Node changeUtil(Node head)
{
    Node temp = head ;
    if(head==null)
        return head ;
    if(temp.next.next!=null)
    {
        int res = temp.data ;
        temp.data = temp.next.next.data;
        temp.next.next.data = res ;
        temp = temp.next.next ;
    }
    else
        return head ;
    if(temp.next!=null)
        temp = temp.next ;
    else
        return head ;
    return changeUtil(temp);
}

void change()
{
    Node temp = changeUtil(head);
    while(temp!=null)
    {
        System.out.println(temp.data);
        temp = temp.next ;
    }
}

}

1 Ответ

0 голосов
/ 05 июня 2018

Предположим, вам просто нужно поменять местами данные каждого 1-го и 3-го узла, оставив список узлов без изменений, вы можете попробовать следующее:

Node changeUtil(Node head)
{
  // Ignore if not both the 1st and 3rd node exist
  // This is were your code fails!!
  if ((head == null) || (head.next == null) || (head.next.next == null))
    return (head);

  // Point to 3rd node
  Node third;
  third = head.next.next;

  // Swap contents
  int temp;
  temp = head.data;
  head.data = third.data;
  third.data = temp;

  // Same stuff starting from 4th node
  changeUtil(third.next);

  // Done
  return (head);

} // changeUtil
...