首页 > 试题广场 >

怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑

[问答题]
怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)?
>>>>>>>>看到别人的方法
ListNode * ReverseList(ListNode * head)
 {
 if(head==NULL || head‐>m_pNext==NULL)
 return head;
 else
 {
 ListNode * newhead=ReverseList(head‐>m_pNext);
 head‐>m_pNext‐>m_pNext=head;
 head‐>m_pNext=NULL;
 return newhead;
}
}

发表于 2015-12-11 21:16:52 回复(0)
Node reverse(Node head) { if (head.next == null) return head;  else {
        Node p = head.next;  Node q = p.next;  head.next = null;  while (p != null) {
            p.next = head.next;  head.next = p;  p = q;  if (q != null)
                q = q.next;  }

    } return head; }

发表于 2016-10-15 17:13:13 回复(0)
可以采用数据结构中讲解的链表的头插法实现链表的逆置
发表于 2015-12-11 19:00:21 回复(0)
这个是直接操作链表
link* reverse(link* head)
{
	if(NULL==head)
		return head;
       link* p=head,*q=p->next;
	p->next=NULL;
	while(q!=NULL)
	{
		link* r=q->next;
		q->next=p;
		p=q;
		q=r;
	}
	head=p;
	return head;
}
也可以交换链表里值的位置;或者操作链表指针,用倒插法逆置链表.

发表于 2015-12-11 10:24:59 回复(0)
正头像
讲讲思路吧:你所谓的链表肯定是单向链表,所以可以把其当做一般的队列。
可以利用一个栈Stack,队列每弹出一个元素就立即压入Stack,等队列为空时,
再将Stack里面的元素弹出并进入刚才的空队列,等Stack里面的元素全部弹出后,
此时队列里面的元素也就反序了(与原队列相比)。


发表于 2015-12-11 09:13:55 回复(0)