struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
没有头结点的单链表,利用三个指针,在原来的基础上进行逆序。这种方法比较实用,效率也高。
ListNode *ReverseList(ListNode *head){
ListNode *pre, *cur, *net;//前驱,中间,后继节点。
pre = head;
cur = pre->next;
while (cur){
net = cur->next;
cur->next = pre;
pre = cur;
cur = net;
}
//这里翻转完成之后起初的头结点就是尾节点了。所以
head->next = NULL;
*head = p1;
return head;
}
有头节点的单链表,从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,头节点依次往后挪
/*void reverse(struct X *head)
{
struct X *p1,*p2;
p1=head->next;
head->next=NULL;
while(p1)
{
p2=p1;
p1=p1->next;
p2->next=head->next;
head->next=p2;
}
printf("已实现单链表的逆序!!");
} 头插法实现逆序 */