每天学习一算法【3】单链表翻转
本文只说明一种方法。
例如链表 head->node1->node2->node3->node4->NULL;
翻转之后 head->node4->node3->node2->node1->NULL;
思路:
我们先定义三个节点:p,q,s;
其中,p是当前节点,s是下一个节点,q是上一个节点;
1.保存下一个节点,s = p->next;
2.把当前节点的下一个节点重新赋值为上一个节点,p->next = q;
3.现在,当前节点p要向下进行,当前节点也就变成了上一个节点,q = p;
4.把下一个节点赋给p,p = s;
void reverse(LinkList l){//head->1->2->3->4->...->NULL
LinkList p = l->next;//p为当前节点
LinkList s = NULL;//下一个节点
LinkList q = NULL;//上一个节点
while(p != NULL){
s = p->next;
p->next = q;
q = p;
p = s;
}
LinkList h = (LinkList)malloc(sizeof(Node));
h->next = q;
print(h);
}
完整代码戳这里;