翻转链表——链表

题目描述:

给定一个链表,要求将这个链表进行翻转。

时间O(n),空间O(1)

解题思路:

设定三个指针,temp, prev,head,从头到尾依次翻转。

head代表当前节点,prev代表前一个节点,temp代表下一个节点。

参考代码:

/**
 * Definition of ListNode
 *
 * class ListNode {
 * public:
 *     int val;
 *     ListNode *next;
 *
 *     ListNode(int val) {
 *         this->val = val;
 *         this->next = NULL;
 *     }
 * }
 */
class Solution {
public:
    /**
     * @param head: The first node of linked list.
     * @return: The new head of reversed linked list.
     */
    ListNode *reverse(ListNode *head) {
        // write your code here
        ListNode* prev = NULL;
        while(head != NULL)
        {
            ListNode* temp = head->next;
            head->next = prev;
            prev = head;
            head = temp;
        }
        return prev;
    }
};
时间: 2024-10-19 13:34:32

翻转链表——链表的相关文章

让我们来写个算法吧,(1)翻转单链表

作为面试中最最最常考的链表题之一,翻转单链表.有以下两种解法: 例: 输入 1->2->3->4  输出 4->3->2->1 Node类定义如下 class Node { int value; Node next; public Node(int value, Node next) { this.value = value; this.next = next; } 1.遍历法 此方法根据链表遍历,通过拆分,刷新节点来达到翻转单链表的功能. 草稿过程 第一次遍历 主链表

双链表&链表合并&多项式相加算法

//单链表的合并 //链表合并 //两个链表必须是有序的 #define Maxsize 5 typedef  int elemtype; typedef struct linklist { elemtype data; struct linklist *next; }Linklist; //建立链表1 Linklist *CreateList1 () { int i,data ; Linklist *head, *p, *q; head=p=(Linklist  *)malloc(sizeof

[LeetCode] 25. K 个一组翻转链表 ☆☆☆☆☆(链表)

https://leetcode-cn.com/problems/reverse-nodes-in-k-group/solution/javadi-gui-fang-fa-100-by-chadriy-imdgvs6udp/ https://leetcode-cn.com/problems/reverse-nodes-in-k-group/solution/tu-jie-kge-yi-zu-fan-zhuan-lian-biao-by-user7208t/ 描述 给你一个链表,每 k 个节点一组

Java基础之翻转单链表

/** * @author luochengcheng * 定义一个单链表 */ class Node { //变量 private int record; //指向下一个对象 private Node nextNode; public Node(int record) { super(); this.record = record; } public int getRecord() { return record; } public void setRecord(int record) { t

p9 翻转单链表(leetcode206)

一:解题思路 链表是递归定义的,所以关于链表的大部分问题也可以用递归来解决.当然也可以不用递归来解决这个问题.这里来介绍2种方法,一种是递归方法,一种是非递归的方法. 二:完整代码示例 (C++版和Java版) 递归版C++ class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* ret = NULL; if (head == NULL) { ret = NULL; } else if (head->n

单链表 /*链表法*/

摘要: 摘要: 根据树的原理做的一个单链表,这里,把单链表看做[树]的简化版. 在树的递归创建中,首先创建是头结点,所以单链表也是一样: 单链表的结构: typedef struct node{ int data; struct node *next; }*List,Node; 创建摘要: 根据树的原理做的阅读全文摘要: 摘要: 根据树的原理做的一个单链表,这里,把单链表看做[树]的简化版. 在树的递归创建中,首先创建是头结点,所以单链表也是一样: 单链表的结构: typedef struct

----------------------------------------链表链表!!!!------------------------------------------------------

现在处于一种     指针不熟  链表不会的状态.....先附上一个  书上的输入代码再说.........汗,先存起来    去看指针吧..... #include<stdio.h> #include<stdlib.h> #define len sizeof(struct student)//宏定义 len为 结构体的长度 struct student { long num; float score; struct student *next; }; int n; struct

[算法练习]逆置链表,链表排序,删除节点

逆置: 使用递归 //考虑递归算法,若只有一个结点,则直接返回,若存在两个结点(a1,a2)则需要做的操作有: //a2->next=a1;a1->next=NULL;return a2; //a2即新的头结点,若有三个结点,则应先将子链(a2,a3)先逆置且返回该子链的新的头结点,然后把子链(a2,a3)当作一个复合结点a2', //组成新的二元组(a1,a2')然后就可以执行前面相同的操作:a2'->next=a1;a1->next=NULL;return a3';即可,多个以

数据结构:链表 &gt;&gt; 链表按结点中第j个数据属性排序(冒泡排序法)

创建结点类,链表类,测试类 1 import java.lang.Object; 2 //结点node=数据date+指针pointer 3 public class Node { 4 Object iprop; 5 public Object getIprop(int i){ 6 switch(i){ 7 case 1:iprop=num;break; 8 case 2:iprop=name;break; 9 case 3:iprop=score;break; 10 } 11 return i