单链表的逆置
单链表的逆置是面试官非常青睐的题,这个题可以看出面试者对链表和指针的操作。
而且问题也很好描述,一句话就表达出了自己的题。
----------------------------------------------------------------------------------------------
一、算法思想:(头插法)
<1>,将源链表分为链表头和链表实体。
<2>,将链表实体节点用头插法依次插入到链表头中。
<3>,如果链表实体插完则算法结束,否则转到<2>.
--------------------------------------------------------------------------------------------
二、算法的实现:
头插法:
void reverse(struct node *head) { if (head == NULL) return ; struct node *p = head->next,*pnext = NULL; head->next = NULL; while (p != NULL) { pnext = p->next; p->next = head->next; head->next = p; p = pnext; } return ; }
利用辅助指针
void ListReverse2(LinkList L) { LNode *real = L->next; //带头结点的链表,real指向第一个实结点 //real为NULL,则链表为只含头结点的空表 //real->nexxt为NULL,则链表只含有一个结点 if(real == NULL || real->next == NULL) return; LNode *pre = real; //先前指针 LNode *cur = real->next; //当前指针 LNode *suc = NULL; //后继指针 while(cur != NULL) { suc = cur->next; cur->next = pre; pre = cur; cur = suc; } real->next = NULL; //while执行后第一个结点和第二个结点互指 L->next = pre; //记录新的头结点 }
每天明白一点知识