原理:
插入排序,将正序的链表,从第1个节点开始去取下一个放到新链表的队列中。
代码实现
为了方便理解可以拆成3个指针。
pre:新链表中的逻辑上的指向头结点的指针,它指示了插入的位置。
current:旧链表中取下的节点。
bianli:旧链表的第1个节点(当current从链表中取下节点后)
public:
ListNode* reverseList(ListNode* head) {
ListNode *current;//当前插入的节点
ListNode *pre;//新链表下一次插入位置,新链表的头结点(逻辑上)
ListNode *bianli;//剩余的第一个旧链表的节点
current= head;
pre= NULL;
while(current!=NULL){
bianli=current->next;
current->next=pre;
pre=current;
current=bianli;
if(bianli=NULL){
break;
}
}
return pre;
}
由于pre是逻辑上的头结点,所以它的代表的是新链表的第一个节点的地址。