对象:带头结点的单链表H
说明:
- H为该单链表的头结点指针。
- 结点定义:
struct node{ elemtype data; struct node *next; }
- 尾插法与头插法都适用。
首先对单链表分情况讨论:
- 如果单链表元素个数为1
——不需要操作,直接输出就是逆置结果。 - 如果单链表元素个数为2
struct node *p=H->next;//定义指向结点的指针p,使p指向第一个结点。 H->next=p->next; p->next->next=p; p->next=NULL; p=H->next;
- 如果单链表元素个数为n (n>2)
struct node *p=H->next, *q=H->next->next->next; //准备工作,逆置前两个结点 H->next=p->next; p->next->next=p; p->next=NULL; p=H->next; //循环逆置部分 while(q != NULL){ H->next = q; q = q->next; H->next->next = p; p = H->next; }
終わりだ!
整合为自定义函数:
void InvList(LINKLIST H){
LINKLIST p = NULL, q = NULL;
if(H->next != NULL && H->next->next != NULL){
p = H->next;
q = H->next->next->next;
H->next = p->next;
p->next->next = p;
p->next=NULL;
p = H->next;
//循环部分
while(q != NULL){
H->next = q;
q = q->next;
H->next->next = p;
p = H->next;
}
}
}