How do you write a function that can reverse a linked-list?

Q

How do you write a function that can reverse a linked-list?

✍: Guest

A
 
Answer1:

void reverselist(void)
{
	if(head==0)
		return;
	if(head-<next==0)
		return;
	if(head-<next==tail)
	{
		head-<next = 0;
		tail-<next = head;
	}
	else
	{
	node* pre = head;
	node* cur = head-<next;
	node* curnext = cur-<next;
	head-<next = 0;
	cur-<next = head;

	for(; curnext!=0; )
	{
	cur-<next = pre;
	pre = cur;
	cur = curnext;
	curnext = curnext-<next;
		}

	curnext-<next = cur;
	}
}

Answer2:

node* reverselist(node* head)
{
if(0==head || 0==head->next) 
//if head->next ==0 should return 
head instead of 0;
return 0;

{
node* prev = head;
node* curr = head->next;
node* next = curr->next;

for(; next!=0; )
{
curr->next = prev;
prev = curr;
curr = next;
next = next->next;
}
curr->next = prev;

head->next = 0;
head = curr;
}

return head;
}

2012-01-17, 2652👍, 0💬