lintcode——两两交换链表中的节点



1.题目

  给一个链表,两两交换其中的节点,然后返回交换后的链表。

   给出1->2->3->4, 你应该返回的链表是2->1->4->3

2.思路

  一开始看到这个题就在纠结到底是两两交换节点还是只交换值,因为觉得交换值更简单就直接上手了。

首先考虑判断空链表;然后考虑链表非空的情况,因为要两两交换值,不能忘了判断head->next非空,对每一对节点,中间使用临时存放值的变量:p下一个的值给临时变量,p的值给p的下一个,临时变量给p,这样就完成了一对数交换;然后p下移,循环上一对节点值交换的思路。

3.代码

 /**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    /**
     * @param head a ListNode
     * @return a ListNode
     */
    ListNode* swapPairs(ListNode* head) {
        // Write your code here
        if(head==NULL)
        { return head;}
        ListNode *p=head;
        while(p!=NULL&&p->next!=NULL)
        {
            int T;
            T=p->next->val;
            p->next->val=p->val;
            p->val=T;
            p=p->next->next;
        }
            return head;
       
    }
};

4.感想

 感觉交换值没多大技术含量,其实交换节点也挺简单的,再增加两个指针,类似交换值一样循环一圈完成每对的交换就ok了,不过交换节点的运行时间要比直接换值长一些。总的说,这道题真的很简单!


以下是递归实现两两交换链表节点的C语言代码: ```c #include <stdio.h> #include <stdlib.h> struct ListNode { int val; struct ListNode *next; }; struct ListNode* swapPairs(struct ListNode* head) { if (head == NULL || head->next == NULL) { return head; } struct ListNode *newHead = head->next; head->next = swapPairs(newHead->next); newHead->next = head; return newHead; } int main() { struct ListNode *node1 = (struct ListNode*)malloc(sizeof(struct ListNode)); struct ListNode *node2 = (struct ListNode*)malloc(sizeof(struct ListNode)); struct ListNode *node3 = (struct ListNode*)malloc(sizeof(struct ListNode)); struct ListNode *node4 = (struct ListNode*)malloc(sizeof(struct ListNode)); node1->val = 1; node2->val = 2; node3->val = 3; node4->val = 4; node1->next = node2; node2->next = node3; node3->next = node4; node4->next = NULL; struct ListNode *newHead = swapPairs(node1); while (newHead != NULL) { printf("%d ", newHead->val); newHead = newHead->next; } return 0; } ``` 以上代码,我们定义了一个结构体 `ListNode` 表示链表节点,包含一个整型变量 `val` 和一个指向下一个节点的指针 `next`。函数 `swapPairs` 是递归实现两两交换链表节点的函数,它的参数是链表节点指针 `head`,返回值是交换后的链表节点指针。如果链表为空或者只有一个节点,直接返回节点;否则,交换前两个节点,并递归处理剩下的节点。最后返回新的链表节点指针。 在 `main` 函数,我们创建了一个包含四个节点链表,并调用 `swapPairs` 函数对链表进行两两交换。最后输出交换后的链表节点值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值