Esempio n. 1
0
struct node *kAltReverse(struct node *head,int k)
{
if(head == NULL)
return NULL;

struct node *prev = NULL;
struct node *curr = head;
struct node *cn = NULL;
int c = 0;
while(curr != NULL && c < k)
{
cn = curr->next;
curr->next = prev;
prev = curr;
curr = cn;
c = c+1;
}
c =0;
if(curr != NULL)
head->next = curr;
printf("cuu== %d\n",curr->data);
// skip the k node

while(curr != NULL && c < k-1)
{
curr = curr->next;
c =c+1;
}
if(curr != NULL)
curr->next = kAltReverse(curr->next,k);
return prev;
}
Esempio n. 2
0
struct node *kAltReverse_i(struct node *head,int k)
{
  if(head == NULL || head->next == NULL) return head;
  struct node *prev = NULL;
  struct node *curr = head;
  struct node *next = NULL;
  for(int i=0;i<k && curr!=NULL;i++)
  {
    next = curr->next;
    curr->next = prev;
    prev = curr;
    curr = next;
  }
  head->next = curr;
  for(int i=0;i<k-1 && curr!=NULL;i++)
  {
    curr = curr->next;
  }
  if(curr!=NULL)
  {
    curr->next = kAltReverse(curr->next,k);
  }
  return prev;
}