题目:将单链表整个逆置,相当于产生了一个新链表,不只是逆序打印那么简单
方法一:从头节点开始,将下一个节点移除,将其插入到链表头部,循环下去,直到链表的最后一个节点插入到头部
- 代码实现:
290 LinkNode* LinkListReverseOne(LinkNode* head)
291 {
292 if(head==NULL){
293 //空链表
294 return NULL;
295 }
296 LinkNode* cur = head;
297 LinkNode* tmp = head;
298 while(cur->next!=NULL)
299 {
300 tmp = cur->next;
301 cur->next=tmp->next;
302 tmp->next = head;
303 head = tmp;
304 tmp = cur;
305 }
306 return head;
307 }
- 运行结果
方法2:先定义一个指针tmp指向NULL,再定义一个next指针指向head的下一个节点,head指向tmp,头指针head等于next,相当于向后移,nex他,tmp都向后移,循环下去,直到head指向旧链表的尾部,作为新链表的头部。下面附上一张图便于大家理解
代码实现
238 LinkNode* LinkListReverseTwo(LinkNode* head)
239 {
240 if(head==NULL){
241 return;
242 }
243 LinkNode* next;
244 LinkNode* tmp = NULL;
245 while(head!=NULL){
246 next = head->next;
247 head->next=tmp;
248 tmp = head;
249 head = next;
250 }
251 return tmp;
252 }
- 运行结果和第一个方法一样