题目描述
输入一个链表,反转链表后,输出链表的所有元素。
python实现:
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回ListNode
# 法1:头插法
def ReverseList2(self, pHead):
# write code here
if pHead is None or pHead.next is None:
return pHead
helper = ListNode(0)
p = pHead
while p:
q = p.next
p.next = helper.next
helper.next = p
p = q
return helper.next
# # 法2:递归
def ReverseList(self, pHead):
if pHead is None or pHead.next is None:
return pHead
new_head = self.ReverseList(pHead.next)
# 此时pHead.next就是new_head 对应 list的最后一个节点
pHead.next.next = pHead
pHead.next = None
return new_head
c++实现:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
//法1:递归写法
ListNode* ReverseList1(ListNode* pHead) {
if(pHead==NULL)
return NULL;
if(pHead->next){
ListNode* newHead = ReverseList(pHead->next);
pHead->next->next = pHead;
pHead->next = NULL;
return newHead;
}else
return pHead;
}
//法2:非递归写法
ListNode* ReverseList(ListNode* pHead) {
if(pHead==NULL)
return NULL;
ListNode* helper = new ListNode(0);//
//helper->next = NULL;//默认
ListNode* p, *q;
p = pHead;
while(p){
q = p->next;
p->next = helper->next;
helper->next = p;
p = q;
}
pHead = helper->next;
delete helper;
return pHead;
}
};