C - 单链表的逆序(不增加额外的节点空间)

你只需要花费5分钟的时间读懂本程序,我想以后你不会再为这个常见的笔试题而困扰~~(给自己留5分钟)

首先,确定逆序一个单链表至少需要两个节点,不然逆序将会没有任何的意义;

其次,本方法需要3个指针的互助下完成;

最后,有无头节点将会有一些差异;(本方法中包含头节点,若是你们想解决无头节点的单链表的逆序,可读懂本程序,自行扩展)

单链表的建立九不废话了~

//s p t 分别指向第一个,第二个,第三个节点
 link s = *head;
 link p = s -> next;
 link t = p -> next;

 while(t != NULL)
 {
     p -> next = s;     //重点(1)
     //三个指针依次后移
     s = p;
     p = t;
     t = t-> next;
 }
 p -> next = s;         //重点(2) ----容易遗忘

 (*head) -> next -> next = NULL;   //重点(3) - 去掉表头节点
 (*head) -> next = p;   //p在执行该步骤之前,指向的时原来的最后一个节点;

你可能感兴趣的:(C)