现在的位置: 首页 > 综合 > 正文

单链表反转/逆序的三种方法(整理)

2014年02月02日 ⁄ 综合 ⁄ 共 809字 ⁄ 字号 评论关闭
/* 单链表反转/逆序 */
Status ListReverse(LinkList L)
{
    LinkList current,pnext,prev;
    if(L == NULL || L->next == NULL)
        return L;
    current = L->next;  /* p1指向链表头节点的下一个节点 */
    pnext = current->next;
    current->next = NULL;
    while(pnext)
    {
        prev = pnext->next;
        pnext->next = current;
        current = pnext;
        pnext = prev;
        printf("交换后:current = %d,next = %d \n",current->data,current->next->data);
    }
    //printf("current = %d,next = %d \n",current->data,current->next->data);
    L->next = current;  /* 将链表头节点指向p1 */
    return L;
}
Status ListReverse2(LinkList L)
{
    LinkList current, p;

    if (L == NULL)
    {
        return NULL;
    }
    current = L->next;
    while (current->next != NULL)
    {
        p = current->next;
        current->next = p->next;
        p->next = L->next;
        L->next = p;
    }
    return L;
}

typedef struct Node
{
	int data;
	struct Node *pnext;
}Node;

Node *head;		/* head是逆序后的头结点 */
Node *reverse(Node *p)
{
	if(p == NULL || p->pnext == NULL)
	{
		head = p;
		return head;
	}
	reverse(p->pnext)->pnext = p;
	p->pnext = NULL;
	return p;
}

抱歉!评论已关闭.