LeetCode 之 Swap Nodes in Pairs — C 实现
2015-06-11 10:59
651 查看
Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
给定一个链表,将链表中的节点两两翻转并返回头结点。
例如,链表
1->2->3->4 ,需要返回
2->1->4->3 。
算法空间复杂度为 O(1),不能改变节点中的值,只能改变其位置。
分析:
可以先翻转头两个节点,这样可以避免翻转过程中对头结点的判断。
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given
1->2->3->4, you should return the list as
2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
给定一个链表,将链表中的节点两两翻转并返回头结点。
例如,链表
1->2->3->4 ,需要返回
2->1->4->3 。
算法空间复杂度为 O(1),不能改变节点中的值,只能改变其位置。
分析:
可以先翻转头两个节点,这样可以避免翻转过程中对头结点的判断。
struct ListNode* swapPairs(struct ListNode* head) { struct ListNode *cur = NULL, *pre, *ne = NULL; if(head == NULL || head->next == NULL)/*空或者只有一个节点*/ return head; if(head && head->next)/*最前面的两个节点需要翻转*/ { ne = head->next; head->next = ne->next; ne->next = head; pre = head; /*pre指向已翻转好的尾节点*/ head = ne; cur = pre->next; } while(NULL != cur) { if(cur->next != NULL) { ne = cur->next; cur->next = ne->next; ne->next = cur; pre->next = ne; pre = cur; cur = cur->next; } else { return head; } } return head; }
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解
- LeetCode [Day 5] Longest Palindromic Substring 题解
- LeetCode [Day 6] ZigZag Conversion 题解
- LeetCode 2: Add Two Numbers (JAVA)
- LeetCode 1: Two Sum (JAVA)