反转链表
[方法1]双指针迭代法
交换pre和cur的指向,使用cur遍历完所有的结点。
遍历结束时,cur=null,pre为反转链表的第一个结点。
1 1 Lnode reverseList(Linklist &head){ 2 2 Lnode *pre,*cur,*tmp; 3 3 pre = NULL; 4 4 cur = head; 5 5 while(cur){ 6 6 tmp = cur ->next; 7 7 cur->next = pre; 8 8 pre = cur; 9 9 cur = tmp; 10 10 } 11 11 return pre; 12 12 }
[方法2]递归解法
将第一个结点与其后的一串结点分为两部分,先把其后一串结点先反转好,再将反转好的一串结点与第一个节点进行反转。
递归出口:不能再反转->当前或下个节点为NULL
1 Lnode reverseList(Linklist &head) 2 { 3 Lnode *cur=NULL; 4 if(head==NULL || head->next==NULL) return head; 5 cur = reverseList(head->next);//子链反转,返回子链头结点 6 head->next->next = head;//反转 7 head->next = NULL;//第一个节点反转指向,指向NULL 8 return cur; 9 }

浙公网安备 33010602011771号