C++ Python 链表逆序 反转链表

**

以下为C++版本

**
已知链表头节点指针head,将链表逆序。(不可申请额外空间)

#include<stdio.h>
struct  ListNode
{
 int val;                 //数据域
 ListNode* next;            //指针域
 ListNode(int x): val(x),next(NULL){}   //构造函数
};
class Solution
{
public:
 Solution() {}
 ~Solution() {}
 ListNode* reverseList(ListNode* head)
 {
 //metohd-1
  ListNode* new_head = NULL;    //指向新链表头节点的指针
  while (head)
  {
   ListNode* next = head->next;   //备份head->next
   head->next = new_head;     //更新head->next
   new_head = head;        //移动new_head
   head = next;          //遍历链表
  }
  return new_head;          //返回新链表头节点
//method-2 Recursive Solution, Time:O(n) and Space: O(n)
/*
   if (head == nullptr || head->next == nullptr) {
   return head;
  }
  ListNode* p = reverseList(head->next);
  head->next->next = head;
  head->next = nullptr;
  return p;
*/
 }
};
int main()
{
 ListNode a(1);
 ListNode b(2);     //将节点简单的链接,进行测试
 ListNode c(3);     //无需构造复杂的链表操作(插入、删除)
 ListNode d(4);
 ListNode e(5);
 a.next = &b;
 b.next = &c;
 c.next = &d;
 d.next = &e;
 Solution solve;
 ListNode* head = &a;
 printf("Before reverse:\n");
 while (head)
 {
  printf("%d\n", head->val);
  head = head->next;
 }
 head = solve.reverseList(&a);
 printf("After reverse:\n");
 while (head)
 {
  printf("%d\n", head->val);
  head = head->next;
 }
 return 0;
}

运行结果
Before reverse:
1
2
3
4
5
After reverse:
5
4
3
2
1

**

以下为Python版本

**输入一个链表,反转链表后,输出新链表的表头

# -*-coding:utf-8-*-
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None


class Solution:
    def ReverseList(self, pHead):
        if pHead == None:
            return None
        if pHead.next == None:
            return pHead

        leftPointer = pHead
        midPointer = pHead.next
        rightPointer = pHead.next.next
        leftPointer.next = None

        while rightPointer != None:
            midPointer.next = leftPointer
            leftPointer = midPointer
            midPointer = rightPointer
            rightPointer = rightPointer.next
        midPointer.next = leftPointer
        return midPointer


if __name__ == '__main__':
    l1 = ListNode(1)
    l2 = ListNode(2)
    l3 = ListNode(3)
    l4 = ListNode(4)
    l5 = ListNode(5)
    l1.next = l2
    l2.next = l3
    l3.next = l4
    l4.next = l5
    s = Solution()
    r1=s.ReverseList(l1)
    while r1:
        print(r1.val)
        r1=r1.next

运行结果为:

5
4
3
2
1
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值