13,反转链表《剑指offer》

题目:

输入一个链表,反转链表后,输出链表的所有元素。

思路:

反转链表,对于片段 1--->2--->3循环操作; 要反转链表需要两步:

一,将2->next指向1 (如果不保存3那么此时就丢失了对3的引用)

二,将链表往后移 即 : 1=2; 2=3;3=3->next

注意的点:

一,首节点的next要指向NULL

二:链表的长度可能小于3

代码:

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
      if(pHead==NULL) return NULL;
      ListNode* newHead;
      ListNode* p1=pHead;
      ListNode* p2=pHead->next;
      ListNode* p3;
      if(p2!=NULL){
         p3=p2->next;
         p1->next=NULL;
         p2->next=p1;
         while(p3!=NULL){
               p1=p2;
               p2=p3;
               p3=p3->next;
               p2->next=p1;
        }
        newHead=p2;
      }else{
         p1->next=NULL;
         newHead=p1;
      }
      return newHead;
    }
};

  

时间: 2024-08-08 09:21:58

13,反转链表《剑指offer》的相关文章

反转链表——剑指offer

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 代码: 1 #include<stdio.h> 2 #include"malloc.h" 3 typedef struct node 4 { 5 struct node *next; 6 int data; 7 }*ListNode; 8 9 //尾插法创建链表(不带头结点) 10 ListNode creatrList() 11 { 12 ListNode p = (ListNode)mall

反转链表 --剑指offer

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反正后链表的头结点. #include<stdio.h> #include<malloc.h> typedef struct node { int Element; struct node *Link; }Node; Node *ReverseList(Node *first) { Node *NewFirst,*p; if(first==NULL||first->Link==NULL) { return first;

反转链表-剑指offer-16

题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 分析: 逐个头插,实现反转 设置3个指针:head 头节点.prev 前一个节点. cur 下一个节点 注意:链表为空,或者只有一个节点的情况! 代码: #include<iostream> using  namespace std; struct ListNode{ int val; ListNode *next; ListNode(int x) :val(x), next(nullptr){} }; class

合并两个排序的链表(剑指offer)

合并两个排序的链表 参与人数:1527时间限制:1秒空间限制:32768K 通过比例:27.96% 最佳记录:0 ms|8552K(来自  牛客708854号) 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目链接:http://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337?rp=1&ru=/ta/coding-interviews&qru=/ta/codin

从尾到头打印链表-剑指Offer

从尾到头打印链表 题目描述 输入一个链表,从尾到头打印链表每个节点的值 输入描述 输入为链表的表头 输出描述 输出为需要打印的“新链表”的表头 思路 单向链表是从头到尾指向的,从尾到头打印符合“后进先出”,所以我们使用栈结构Stack 代码 import java.util.ArrayList; import java.util.Stack; public class Solution03 { public ArrayList<Integer> printListFromTailToHead(

《剑指offer》题解

有段时间准备找工作,囫囵吞枣地做了<剑指offer>提供的编程习题,下面是题解收集. 当初没写目录真是个坏习惯(-_-)||,自己写的东西都要到处找. 剑指Offer - 九度1524 - 复杂链表的复制 剑指Offer - 九度1509 - 树中两个结点的最低公共祖先 剑指Offer - 九度1508 - 把字符串转换成整数 剑指Offer - 九度1504 - 把数组排成最小的数 剑指Offer - 九度1503 - 二叉搜索树与双向链表 剑指Offer - 九度1390 - 矩形覆盖 剑

剑指OFFER之反转链表(九度OJ1518)

题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数.输入的第二行包含n个整数t(0<=t<=1000000):代表链表元素. 输出: 对应每个测试案例,以此输出链表反转后的元素,如没有元素则输出NULL. 样例输入: 5 1 2 3 4 5 0 样例输出: 5 4 3 2 1 NULL 解题思路:

【剑指offer】递归循环两种方式反转链表

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25737023 本文分别用非递归和递归两种方式实现了链表的反转,在九度OJ上AC. 题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数.输入的第二行包含n个整数t(0<=t<=1000000)

剑指offer之【复杂链表的复制】

题目: 复杂链表的复制 链接: https://www.nowcoder.com/practice/f836b2c43afc4b35ad6adc41ec941dba?tpId=13&tqId=11178&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为

剑指offer | 从尾到头打印链表

题目描述: “输入一个链表,从尾到头打印链表每个节点的值.” 这是我做的<剑指offer>系列的第一题,好的开头就是成功的一半.然而,我提交了一次,WA!再提交,WA!Com'on! 看来我的开端并不顺利.不过我要的可不是成功的一半,这样的开端怎么能阻挡我AC之路!仔细看了一遍题目要求,看了提交格式.再提交! Finally,AC! 代码如下: 1 /** 2 * struct ListNode { 3 * int val; 4 * struct ListNode *next; 5 * Lis