《链表》之无表头链表逆序
前插法

typedef struct Node{ int value; //数据域 Node *next; //指针域 }Node; void reverseLink(Node* ph) { if((NULL == ph)||(NULL == ph->next)) return ph; Node* pSub = ph->next; ph->next = NULL; //当前指针变成头指针,头指针变成次级指针 while(NULL != pSub) { Node* tmp = pSub->next;//类比循环前,先找新的子链 pSub->next = ph;//类比循环前,当前节点前移动 ph = pSub; pSub = tmp; } }
public ListNode reverseList(ListNode head) { ListNode curr = head;
ListNode prev = null; while (curr != null) { ListNode next = curr.next; curr.next = prev; prev = curr; curr = next; } return prev; }
void reverseBetweenLink(Node* head,int m,int n){ if(head==NULL||head->next==NULL){ return; } if(m<1||m>=n){ return; } Node* p1=head; Node* p3 = head; while(n>0){ if(m>2){ p1=p1->next;//头前一个节点的指针 m--; } p3=p->next;//尾后一个节点的指针 n--; } if(m=1){ Node* p2 = p1->next; p1->next = p3; }else{ Node* p2=p1->next->next;//开始逆序的下一节点的指针 p1->next->next = p3; } while(p2!=p3){ Node* tmp = p2->next; if(m=1){ p2->next = p1; p1 = p2; }else{ p2->next = p1->next; p1->next = p2; } p2=tmp; } }

浙公网安备 33010602011771号